2012-03-11 2 views
3

"Options"모델의 필터링 된 개체 목록에 의해 채워지는 드롭 다운 상자가 있습니다. 현재 드롭 다운 목록에는 각 옵션의 이름이 표시됩니다. 같은 테이블의 다른 속성을 표시하려면 어떻게해야합니까?Django ModelChoiceField 드롭 다운 상자 사용자 정의 인구

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

빠른 예 : 상자는 현재 자동차의 이름이 표시 드롭 다운 : 나는 각 차량의 색상을 표시 할 얻을 것입니다 방법 "Camero, 닛산, 혼다" 를 ("블랙, 검정, 흰색") . 색은 Option 테이블의 필드이기도합니다.

답변

3

구성 후 ModelChoiceField에서 label_from_instance을 무시할 수 있습니다. 그것은 단지 고유의 인스턴스를 표시하므로

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

는 당신이 그것을 할 수 있습니다 만 의견에 따라

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) 

업데이트 한 번 색상을 보여? 예를 들어, 색상을 두 번 표시하는 대신 한 번만 표시하십시오. – JohnnyCash

+0

@ JohnnyCash : 내 업데이트를 확인하십시오. – sdolan