在Django中,我希望能够在模型(或至少数据库)级别标记某些模型字段,以确保在创建对象时明确指定它们(即不依赖于默认值)。 / p>
目前,Django允许您在表单级别指定模型字段(通过在模型中指定blank=False
)。但是,似乎没有类似的选项可以在模型或数据库级别获得此行为。
看起来似乎有各种各样的黑客可以实现类似的东西。例如,您可以将default
设置为违反数据库约束的内容。例如,您可以执行以下操作:
models.CharField(_('characters'), max_length=4, default=None)
或
models.CharField(_('characters'), max_length=4, default="abcdef")
前一个示例在保存到数据库时有效,因为None
违反了null=False
的默认非空约束(引发IntegrityError
)。后者有效,因为保存时会引发DataError
。但我不知道这是否可以保证在所有数据库中都有效。
我错过了什么,还是有更好的方法?
答案 0 :(得分:0)
如果django模型在save()上自动调用full_clean(),则您的检查将在没有表单的模型级别运行。我一直在玩这个django项目中的默认行为,创建一个自动清理模型子类,它在save()上执行full_clean(),然后从中导出我的模型。
如果您想了解为什么它不是这样的:Why doesn't django's model.save() call full_clean()?