Django模型中的隐藏字段

时间:2010-01-18 13:27:09

标签: django django-models django-forms

前段时间我做了一个Model课程。我为它制作了几个ModelForms,它工作得很漂亮。

我最近不得不向其添加另一个可选(blank = True,null = True)字段,以便我们可以在用户之间存储一些关系数据。它本质上是一个推荐系统。

问题是添加这个新字段意味着引用字段显示我没有更改ModelForms以排除它。通常这只意味着额外的10分钟通过并排除它们,但在这种情况下,由于项目管理政策不受我的控制,我只能控制此应用程序的模型。

我可以:

  • 将字段设置为自动排除?
  • 设置它以使其呈现为隐藏(可接受但不完美)?

4 个答案:

答案 0 :(得分:68)

如果您有权访问该模板,则可以使用以下代码呈现隐藏字段:

{{ form.field_name.as_hidden }}

而不是标准:

{{ form.field_name }}

答案 1 :(得分:49)

来自Using a subset of fields on the form上的文档:

  

在模型字段上设置editable = False。因此,通过ModelForm从模型创建的任何表单都不会包含该字段。

答案 2 :(得分:4)

您可以定义自定义模型字段子类并覆盖formfield()方法以返回带有HiddenInput小部件的字段。请参阅the documentation for custom fields

答案 3 :(得分:1)

虽然你提到你不能在你的案件中使用排除,但我认为其他遇到这个答案的人(比如我自己,基于标题)可能会觉得它有用。

可以在ModelAdmin中使用exclude有选择地隐藏字段,这是我正在处理的内容的片段:

class ItemsAdmin(admin.ModelAdmin):
    form = ItemsForm
    actions = None
    list_display = ('item_id', 'item_type', 'item_title', 'item_size', 'item_color',)
    search_fields = ('item_id', 'item_title',)
    inlines = [ImageInline,]
    readonly_fields = ('disable_add_date','disable_remove_date',)
    exclude = ('add_date', 'remove_date',)
    ###.............