所以我们最近升级到 Django 1.4,我注意到模型表单处理带有可编辑=假的模型字段的方式发生了变化。
如果我有一个用户模型:
class User(models.Model):
id = UUIDField(primary_key=True, default=uuid4str)
name = models.CharField(max_length=128)
其中 UUIDField 自动具有 kwargs['editable'] = False,然后尝试制作一个模型形式:
class UserFormSelf(ModelForm):
class Meta:
model = models.User
fields = ('id', 'name',)
widgets = {
'id': HiddenInput()
}
运行时出现以下错误:
“为用户指定的未知字段(ID)”
根据文档,如果为 False,该字段将不会显示在管理员或任何其他 ModelForm 中。默认为真。. 但是,由于该字段是隐藏的并且仅用于我可以确定正在编辑哪个用户,因此应该有一种方法可以在表单中允许它,对吗?
我真的不希望 id 是可编辑的,但是如果这是我可能需要的唯一解决方案。也许它可以是可编辑的,但是如果它不是一个新对象,那么在保存时,我会引发一个异常。想知道是否可以先使用 editable=False 来做到这一点。
谢谢你的帮助!
编辑:显然无法检查 id 字段是否已被编辑并在 pre_save 上编写自定义“editable = False”,因为 pre_save 自动认为一个对象是新的,如果它有一个新的 id。如果您无法提供上述问题的答案,但知道如何执行此操作,请也告诉我。