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)
是否可以这样做,使其仅显示唯一的实例?例如,不显示两次颜色,只显示一次?