2012-06-07 46 views
2

爲了在Django AdminForm的ForeignKey選擇框中僅顯示相關項目,我使用ActionAdminForm類自定義了我的ActionAdmin模型。預先選擇我使用類似的貼圖https://stackoverflow.com/a/9191583/326905。非常感謝,這工作真的很好。通過覆蓋ModelForm和ModelChoiceField連接兩個模型的值

但是當用戶沒有瀏覽表客戶 - >項目 - >動作,並直接導航到Django管理操作,我想在此格式中ActionAdmin表格的選擇框的外鍵項目中顯示的值:

Customername1 - Projectname1
Customername1 - Projectname2
Customername2 - Projectname3

我的問題是,我怎麼能覆蓋self.fields [ 「項目」]
在別的CAS e在下面的代碼中,
,以便我從
Project.customer.name和Project.name獲得selectbox值連接起來?

class ActionAdminForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(ActionAdminForm, self).__init__(*args, **kwargs) 
     if self.request.GET.get('project'): 
      prj = Project.objects.get(id=self.request.GET.get('project')) 
      self.fields["project"].queryset = Project.objects.filter(customer = prj.customer) 
     else: 


      self.fields["project"] = ProjectModelChoiceField(Project.objects.all().order_by('name')) 

    class Meta: 
     model = Action 
+0

我自己解決了。重寫ModelChoiceField是線索。 – surfi

+0

做得好,+1爲了解決你自己。我完全忘記了'ModelChoiceField.label_from_instance'。 –

+0

謝謝。越來越多的python,django向我做出努力。 – surfi

回答

1

我得到了解決方案。是啊。首先,當我嘗試使用self.fields [「project」]時,總是出現錯誤,但現在它可以正常工作。我把它寫進別人,並寫了一個像下面這樣的ProjectModelChoiceField,受此描述的影響:http://bradmontgomery.blogspot.de/2009/01/custom-form-for-djangos-automatic-admin.html

class ProjectModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "%s - %s"%(obj.customer.name, obj.name)