防止创建X个以上的模型实例

时间:2019-01-01 12:46:25

标签: django

我想创建某种形式的验证,以防止创建满足特定条件的三个以上特定模型实例。

1)这些模型实例仅在/ admin中创建(即,没有创建这些模型的视图,因此,我无法在视图中进行验证

2)我的理解是,forms.py中的def clean()仅适用于您在网页上看到的面向字体的表单。由于这些模型实例仅在后端创建,因此,我不认为我可以创建表单并使用def clean()进行此验证

3)我考虑过在我的models.py中创建一个验证器以进行此验证,但是我不确定如何在验证器中获取模型实例。我的理解是,验证器只能用于在现场一级验证数据。

这让我有些困惑。我不确定在哪里可以执行验证以确保仅创建3个具有X准则的模型实例。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

此代码检查添加许可,然后根据您的要求将其更改为false。就您而言,model.Examplemodel.objects.count()==3

from django.contrib import admin
from myapp import models

@admin.register(models.ExampleModel)
class ExampleModelAdmin(admin.ModelAdmin):

# some code...

def has_add_permission(self, request):
    # check if generally has add permission
    retVal = super().has_add_permission(request)
    # set add permission to False, if object already have 3 instances
    if retVal and models.ExampleModel.objects.count()==3:
        retVal = False
    return retVal