如何限制Django应用中的单条记录?
我想用一个模型来保存Django应用的系统设置。为了确保这个模型只能有一条记录,我该怎么限制呢?
8 个回答
13
威廉说得对,但我觉得这是一种最佳实践。
def has_add_permission(self, *args, **kwargs):
return not MyModel.objects.exists()
在官方的Django文档中有提到:
注意:如果你只是想知道是否至少有一个结果存在,那就不要使用这个方法。使用exists()会更有效率。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated
15
试试这个:
class MyModel(models.Model):
onefield = models.CharField('The field', max_length=100)
class MyModelAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
# if there's already an entry, do not allow adding
count = MyModel.objects.all().count()
if count == 0:
return True
return False
14
一个简单的方法是把设置的名称当作设置表里的主键。主键的特点是不能有重复的记录,这样就能确保Django和数据库都能保证数据的完整性。