我有一个下拉框,由模型“选项”中的过滤对象列表填充。目前,下拉列表显示每个选项的名称。如何让它显示同一个表中的另一个属性?
self.fields['name'] = forms.ModelChoiceField(queryset = Options.objects.filter(option_type = s), label = field_label, required=False)
快速示例:下拉框当前显示汽车的名称:“Camero,Nissan,Honda” 如何让它显示每辆车的颜色(“黑色,黑色,白色”)。请注意,颜色也是Option表中的一个字段。
答案 0 :(得分:3)
您可以在构建后覆盖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)