一尘不染

限制要创建的模型实例数-Django

django

我有只希望从中创建一个实例的模型,不应再允许更多实例。

这可能吗?我有感觉到已经在某处完成了此操作,但是很遗憾,我无法找到它。

编辑:我需要一个愚蠢的简单CMS。我有一个FrontPage和Page类继承的抽象类。我只希望能够创建一个首页对象。

FrontPage对象和Page对象之间的区别在于,它们应该具有略有不同的字段和模板,并且如上所述,只能创建一个FrontPage。


阅读 373

收藏
2020-04-01

共1个答案

一尘不染

我想自己做类似的事情,发现Django的模型验证为执行提供了便利:

from django.db import models
from django.core.exceptions import ValidationError

def validate_only_one_instance(obj):
    model = obj.__class__
    if (model.objects.count() > 0 and
            obj.id != model.objects.get().id):
        raise ValidationError("Can only create 1 %s instance" % model.__name__)

class Example(models.Model):

    def clean(self):
        validate_only_one_instance(self)

这不仅会阻止创建新实例,而且Django管理员界面实际上会报告创建失败,其原因是“只能创建1个实例实例”(而文档中的早期返回方法并未说明为什么保存无效)。

2020-04-01