如何在Django中最好地标记模型字段?

时间:2014-01-28 00:54:11

标签: django django-models

在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。但我不知道这是否可以保证在所有数据库中都有效。

我错过了什么,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

如果django模型在save()上自动调用full_clean(),则您的检查将在没有表单的模型级别运行。我一直在玩这个django项目中的默认行为,创建一个自动清理模型子类,它在save()上执行full_clean(),然后从中导出我的模型。

如果您想了解为什么它不是这样的:Why doesn't django's model.save() call full_clean()?