【问题标题】:Need to add empty choice to existing valuelistqueryset for django choicefield需要将空选项添加到 django 选择字段的现有 valuelistqueryset
【发布时间】:2013-06-26 21:39:48
【问题描述】:

我需要将现有 valuelistqueryset 中的空选择值添加到我的 Django 类似表单中的以下选择字段到modelchoicefield("-------------")。谁能帮我解决这个问题?

hardness = forms.ModelChoiceField(queryset=Description.objects.filter(variable="hardness", paradigm='206209').values_list('dvalue', flat=True).distinct().order_by('dvalue'))

@jghyllebert 感谢您的回复。但在这种情况下,我需要将模型选择字段转换为选择字段。我需要choicefield 的解决方案。对不起,如果我不清楚。我在选择字段中尝试了empty_labelempty_value,但表单出错了。

rimplan = forms.ChoiceField(
    required=False, 
    empty_value = '---',
    choices=Description.objects.filter(
        variable="rimplan", 
        paradigm='206209').values_list(
            'dvalue', 
            flat=True).distinct().order_by('dvalue')) 

因此,我实施了这个解决方案,效果很好。

EXTSURCOLOR_DESCRIPTIONS = Description.objects.filter(
    variable="exteriorsurfacecolor", 
    paradigm='206209') 

EXTSURCOLOR_CHOICES = [('', '---')] 

EXTSURCOLOR_CHOICES.extend(
    EXTSURCOLOR_DESCRIPTIONS.values_list(
        "dvalue", 
        "dvalue").distinct().order_by('dvalue')) 

exteriorsurfacecolor = forms.ChoiceField(choices = EXTSURCOLOR_CHOICES) 

我只是想知道是否有更好的解决方案。

【问题讨论】:

  • 如果您设置了不适合您的required=False,是否会显示空值?您不能将其直接插入查询集中,但它会将其添加到为该字段提供的选项中。

标签: django django-forms choicefield


【解决方案1】:

有一个选项empty_label,您可以使用它为空选项设置自定义值。

hardness = forms.ModelChoiceField(
    queryset=Description.objects.filter(variable="hardness", paradigm='206209').values_list('dvalue', flat=True).distinct().order_by('dvalue'),
    empty_label='Not applicable', #for instance
    required=False
)

按照文档:

请注意,如果需要 ModelChoiceField 并且具有默认初始值,则不会创建空选项(无论 empty_label 的值如何)。

【讨论】:

  • @jghyllebert 感谢您的回复。但在这种情况下,我需要将模型选择字段转换为选择字段。我需要choicefield的解决方案。对不起,如果我不清楚。我在选择字段中尝试了 empty_label 和 empty_value,但表单出错。 rimplan = forms.ChoiceField(required=False,empty_value = '---',choices=Description.objects.filter(variable="rimplan",paradigm='206209').values_list('dvalue',flat=True)。 distinct().order_by('dvalue'))
  • 因此,我已经实现了这个解决方案,它工作得很好。 EXTSURCOLOR_DESCRIPTIONS = Description.objects.filter(variable="exteriorsurfacecolor",parameter='206209') EXTSURCOLOR_CHOICES = [('', '---')] EXTSURCOLOR_CHOICES.extend(EXTSURCOLOR_DESCRIPTIONS.values_list("dvalue", "dvalue") .distinct().order_by('dvalue')) exteriorsurfacecolor = forms.ChoiceField(choices = EXTSURCOLOR_CHOICES) 我只是想知道是否有更好的解决方案。
  • 可以在您的问题中发布此代码吗?现在很难阅读。
猜你喜欢
  • 2022-11-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2010-11-19
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多