1

所以我们最近升级到 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。如果您无法提供上述问题的答案,但知道如何执行此操作,请也告诉我。

4

1 回答 1

1

为什么不自己显示价值?表单用于输入/输出,并且如果记录已经存在,大概您的 UUID 将在您端计算或为应用程序所知。由于您没有提供模板代码,因此我很难举个例子,但是如果您as_p()用于显示表单,只需添加类似于<p>Id: {{ object.id }}</p>在编辑现有对象的情况下的内容。

于 2012-11-19T23:21:16.010 回答