首页 文章

在Django Model Form中包含一个editable = False字段作为HiddenInput

提问于
浏览
1

所以我们最近升级到了Django 1.4,我注意到模型表单处理带有editable = False的模型字段的方式发生了变化 .

如果我有一个用户模型:

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)”

根据文档,If False, the field will not be displayed in the admin or any other ModelForm. Default is True. . 但是,由于该字段是隐藏的并且仅使用,因此我可以确定正在编辑哪个用户,应该有一种方法允许它在表单中,对吗?

我真的不希望id可以编辑,但是如果这是我可能必须的唯一解决方案 . 也许它可以编辑,但如果它不是一个新对象,那么我会引发异常 . 想知道是否有可能首先使用editable = False .

谢谢你的帮助!

编辑:显然无法检查id字段是否已编辑并在pre_save上写入自定义“editable = False”,因为pre_save会自动认为对象是新的,如果它有新ID . 如果您无法提供上述答案,但知道如何做到这一点,请告诉我 .

1 回答

  • 1

    为什么不自己展示 Value 呢?表单用于输入/输出,如果记录已存在,则可能是您的UUID将在您的最终计算或应用程序已知 . 它提供了您的模板代码,但是如果您使用 as_p() 来显示您的表单,只需在编辑现有对象时添加类似 <p>Id: {{ object.id }}</p> 的内容 .

相关问题