试试这个:
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
Run Code Online (Sandbox Code Playgroud)
覆盖has_add_permission工作,但在给定的示例中它打破了Django中的权限系统(没有必要权限的工作人员可以添加设置).这是一个不破坏它的人:
class SettingAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
base_add_permission = super(SettingAdmin, self).has_add_permission(request)
if base_add_permission:
# if there's already an entry, do not allow adding
count = Setting.objects.all().count()
if count == 0:
return True
return False
Run Code Online (Sandbox Code Playgroud)
一种简单的方法是使用设置的名称作为设置表中的主键.不能有多个具有相同主键的记录,因此这将允许Django和数据库保证完整性.
小智 5
威廉是对的,但我想这是最佳做法
def has_add_permission(self, *args, **kwargs):
return not MyModel.objects.exists()
Run Code Online (Sandbox Code Playgroud)
如官方Django文档中所述:
注意:如果您要做的只是确定是否存在至少一个结果,请不要使用它。使用exist()更有效。
https://docs.djangoproject.com/zh-CN/dev/ref/models/querysets/#when-querysets-are-evaluated
| 归档时间: |
|
| 查看次数: |
5507 次 |
| 最近记录: |