gpt4 book ai didi

django - ModelChoiceField,删除空白选择

转载 作者:行者123 更新时间:2023-12-03 12:36:17 27 4
gpt4 key购买 nike

我想摆脱Django在ModelForm中添加代表外键的select输入的“-------------”选择

可以使用empty_label=none选项是been answered,但我具有ModelForm,而不是常规形式,并且不允许覆盖该字段。

我知道我可以重写ModelForm的__init__()方法,以便使用以下命令修改ModelChoiceField的queryset

self.fields['my_foreign_key'].queryset = ....

但这确实很丑陋,因为在“Main”模型上发生了+10个foreign_key,并且基于此模型的Modelform超过了

整个上下文:
  • 这些foreign_key中的每一个都指向相同类型的模型:它们是特定的选择列表,许多模型可以简化通过管理员的修改。
  • 所有这些模型都通过“to_field = code”关系与主模型相关,该关系基于一个包含三个字母代码的Charfield(嘿,不是我的错,我必须使用旧版MS Access DB),即CharField具有blank=True, unique=True选项,因此我可以为每个列表创建一个"---No information yet---"记录,该记录具有一个空白值而不是三个字母的代码...

  • 现在的情况是:我得到一个带有两个“空白值”选择的选择输入字段:django一个和我的一个,一个接一个。
    我也只是在这里错过了一个'empty_label = none'选项...

    最佳答案

    如果要删除所有ModelChoiceField的空白选项,则可以执行以下操作。

    class Form(forms.ModelForm):
    class Meta:
    model = MyModel

    def __init__(self, *args, **kwargs):
    super(Form, self).__init__(*args, **kwargs)
    modelchoicefields = [field for field_name, field in self.fields.iteritems() if
    isinstance(field, forms.ModelChoiceField)]

    for field in modelchoicefield:
    field.empty_label = None

    但这将替换所有 ModelChoiceField,因此可能更细粒度的类似:
    for fieldname in ('field1','field2','field3','field4','field5','field6'):
    self.fields[fieldname].empty_label = None

    当然比您提到的 __init__覆盖更容易!

    来自莫里茨的更新

    您可以使用2017+使用:
    forms.ModelChoiceField(... empty_label=None

    关于django - ModelChoiceField,删除空白选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692676/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com