【问题标题】:Adjusting default value in select when using modelform使用modelform时调整select中的默认值
【发布时间】:2014-03-24 07:15:27
【问题描述】:

我有一个带有指向外键的元素的模型表单,这意味着默认情况下它是一个 modelmultiplechoice 字段,但我已经在元类中更改了它,因此它使用了一个选择字段,因为我想要一个包含由指向的值的下拉列表外键(外键指向带有类别的表)。

这一切都很好,但在表单上显示的默认元素是“----”并且我在此页面上阅读: https://docs.djangoproject.com/en/1.6/ref/forms/fields/#modelchoicefield 我应该能够使用 empty_label 来更改它,因此这是一个最具描述性/更用户友好的值。我想将其更改为实际存在的值,但 empty_label 似乎不支持这一点,并且当使用带有模型表单的外键时,我在其他地方没有看到让我这样做的功能。

我尝试通过在模型表单的元类中添加一个选项来实现这一点,如下所示:

'categoryID': Select(attrs={'class': 'form-control', 'empty_label': 'hello'})

我没有收到任何语法错误,但选择框的默认值没有改变,关于为什么这不起作用的任何想法?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果你想使用字段选择中的值,你不应该使用“empty_label”——除此之外,这实际上是一个空值,所以当它被选中时发送到服务器的值将只是“”。

    相反,您应该在定义字段或实例化表单时提供initial 参数。

    【讨论】:

    • 您可能还必须设置该字段为必填项。如果不需要,您确实应该可以选择什么都不选。如果没记错的话,具有初始值的非必填字段将尊重该初始值,但仍然可以选择空标签。
    • Hmm ok, i did see an initial value in the docs but when the select is automatically populated with a queryset i didnt think i could use it and im getting a little confused as to if the parameter is for模型字段或小部件,但不了解更多信息。谢谢
    • initial 参数用于表单字段本身,而不是模型字段或小部件。
    • 好的,那么当我使用 {{ form.categoryID }} 时自动生成字段时如何添加此参数 ..我知道我可以将其缩减为写入字段 itselt 但我没有确定在这种情况下如何将查询集作为参数传递给模板中的 select 元素,我已经能够毫无问题地自定义其他 html 元素,但我不能将它放在选项值之间
    • 有几个地方可以做到这一点。您可以使用formfield_overridesformfield_for_foreignkey。我可能会使用formfield_for_foreignkey,因此我可以动态查找PK 以将初始值设置为,而不必将其硬编码到formfield_overrides 字典中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2014-07-06
    • 1970-01-01
    • 2016-04-23
    • 2012-08-30
    • 2016-10-31
    相关资源
    最近更新 更多