【问题标题】:Preventing more than X instances of a model from being created防止创建超过 X 个模型实例
【发布时间】:2019-05-28 11:08:48
【问题描述】:

我想创建某种验证,以防止创建超过 3 个满足特定条件的特定模型实例。

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: django


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2013-01-07
      • 2023-03-23
      • 2018-04-22
      • 2016-12-12
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多