【问题标题】:Django ModelChoiceField drop down box custom populationDjango ModelChoiceField 下拉框自定义填充
【发布时间】:2012-03-28 06:41:02
【问题描述】:

我有一个下拉框,它由模型“选项”中的过滤对象列表填充。目前,下拉列表显示每个选项的名称。我如何让它显示同一个表中的另一个属性?

self.fields['name'] = forms.ModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False) 

简单示例:下拉框当前显示汽车的名称:“Camero、Nissan、Honda” 我如何让它显示每辆车的颜色(“黑色,黑色,白色”)。请注意,颜色也是选项表中的一个字段。

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    您可以在ModelChoiceField 构建后覆盖label_from_instance

    self.fields['name'] = forms.ModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False)
    self.fields['name'].label_from_instance = lambda obj: "{0} {1}".format(obj.name, obj.color)
    

    根据评论更新只显示一次颜色:

    class MyModelChoiceField(forms.ModelChoiceField):
         def __init__(self, *args, **kwargs):
              super(MyModelChoiceField, self).__init__(self, *args, **kwargs)
              self.shown_colors = []
    
    
         def label_from_instance(self, obj):
              if obj.color not in self.shown_colors:
                   self.shown_colors.append(obj.color)
                   return "{0} {1}".format(obj.name, obj.color)
              else:
                   return obj.name
    
    
    self.fields['name'] = MyModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False)
    

    【讨论】:

    • 你能做到让它只显示唯一的实例吗?例如,不是显示两次颜色,而是显示一次?
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2019-11-30
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多