Django ModelChoiceField下拉框自定义填充

Django ModelChoiceField下拉框自定义填充,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有一个下拉框,该框由模型“选项”中筛选出的对象列表填充。当前,下拉列表显示每个选项的名称。如何让它显示同一表中的另一个属性 self.fields['name'] = forms.ModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False) 快速示例:下拉框当前显示汽车名称:“Camero、Nissan、Honda” 我如何让它显示每辆车的颜

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

self.fields['name'] = forms.ModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False) 
快速示例:下拉框当前显示汽车名称:“Camero、Nissan、Honda” 我如何让它显示每辆车的颜色(“黑,黑,白”)。请注意,颜色也是选项表中的一个字段。

您可以在构建后覆盖
modelcoocefield
上的

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)

是否可以这样做,使其仅显示唯一的实例?例如,不显示两次颜色,只显示一次?