如何限制Django应用中的单条记录?

11 投票
8 回答
11522 浏览
提问于 2025-04-15 18:17

我想用一个模型来保存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和数据库都能保证数据的完整性。

撰写回答