2012-03-11 12 views
3

私はモデル "Options"からのオブジェクトのフィルタリングされたリストによって入力されているドロップダウンボックスを持っています。現在、ドロップダウンリストには各オプションの名前が表示されます。同じテーブルの別の属性を表示するにはどうすればよいでしょうか?Django ModelChoiceFieldドロップダウンボックスのカスタム集団

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

クイック例:「Camero、日産、ホンダ」 どのように私は(「黒、黒、白」)、それは、各車の色を表示するようになるだろう:ボックスは、現在の車の名前が表示され、ドロップダウン。色はオプションテーブルのフィールドでもあることに注意してください。

答えて

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) 
+0

は、あなたがそれを行うことができますか?たとえば、色を2回表示する代わりに、1回だけ表示しますか? – JohnnyCash

+0

@ JohnnyCash:私のアップデートをチェックしてください。 – sdolan