我有只希望从中创建一个实例的模型,不应再允许更多实例。
这可能吗?我有感觉到已经在某处完成了此操作,但是很遗憾,我无法找到它。
编辑:我需要一个愚蠢的简单CMS。我有一个FrontPage和Page类继承的抽象类。我只希望能够创建一个首页对象。
FrontPage对象和Page对象之间的区别在于,它们应该具有略有不同的字段和模板,并且如上所述,只能创建一个FrontPage。
我想自己做类似的事情,发现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个实例实例”(而文档中的早期返回方法并未说明为什么保存无效)。