【问题标题】:How to override field name attribute in django model form?如何覆盖 Django 模型表单中的字段名称属性?
【发布时间】:2021-09-09 09:54:19
【问题描述】:

我有一个类似于下面的模型表格:

class BookSearchForm(ModelForm):

    class Meta:
       model = Book
       fields = ['publisher', 'authors', 'category'

如何覆盖上述模型表单中的name属性字段?

我试过了,但是没用:

class BookSearchForm(ModelForm):

    class Meta:
       model = Book
       fields = ['publisher', 'authors', 'category'
       widgets = {
           'publisher': forms.SelectMultiple(attrs={'name': 'pub'}),
           'authors': forms.SelectMultiple(attrs={'name': 'aut'}),
           'category': forms.SelectMultiple(attrs={'name': 'cat'}),
       }

【问题讨论】:

  • 为什么要覆盖 name 属性?如果您想手动编写 HTML,只需将名称设置为表单所期望的名称。
  • 然后手动处理表单
  • 例如,我想在HTML中将表单写为{{ form.publisher }},而它的name属性是“pub”。

标签: python-3.x django django-forms


【解决方案1】:

您不想更改表单中字段的 名称,如果您不提供 db_column 作为数据库的名称,django 需要它来收集该字段的数据柱子。您可以使用第一个选项做什么,如果您希望用户看到发布者或其他名称,请在模型中添加一个 verbose_name,然后对于实际名称,您可以根据需要声明该字段。您的代码可能如下所示

pub = models.WhateverField(verbose_name='what i want you to see')

现在当您执行{{form.pub.label)}} 时,“我希望您看到的内容”会显示在 html 中。当然,不要忘记在模板中添加实际输入,{{form.pub}}。这样,您无需在表单中添加任何额外内容来显示用户友好名称。我已将其发布为答案,因为我的评论字符用完了。

【讨论】:

  • 谢谢,但我知道名称(在 html attr 中)和详细名称(在 django 中)之间的区别。我想更改名称属性。发送 get 请求时作为参数出现在地址栏中的参数。
猜你喜欢
  • 2012-02-06
  • 2010-10-29
  • 2017-05-05
  • 2013-01-31
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多