2012-04-18 91 views
3

我想在我的ModelForm過濾ManyToManyField選擇:如何過濾Django ModelForm中的ManyToManyField選項?

class MyForm(forms.ModelForm): 
    class Meta: 
     model = Entity 
     fields = ['parent_entities'] 

    def __init__(self, *args, **kwargs): 
     self.root_entity = kwargs.pop('root_entity') 
     self.Meta.fields['parent_entities'].queryset = Entity.objects.filter(root_entity=self.root_entity) 
     super(MyForm, self).__init__(*args, **kwargs) 

我嘗試了很多不同的代碼,我已經看到了,但沒有尚未奏效。

我想我的問題是,我不能得到這個'parent_entities'字段。 有了這個代碼,我有錯誤:

list indices must be integers, not str 

回答

5
def __init__(self, *args, **kwargs): 
    # First pop your kwargs that may bother the parent __init__ method 
    self.root_entity = kwargs.pop('root_entity') 
    # Then, let the ModelForm initialize: 
    super(MyForm, self).__init__(*args, **kwargs) 
    # Finally, access the fields dict that was created by the super().__init__ call 
    self.fields['parent_entities'].queryset = Entity.objects.filter(root_entity=self.root_entity) 
+0

我已經嘗試過,之前,但我有這樣的錯誤消息: AttributeError的 「MyForm的」對象有沒有屬性「域」 – user1257144 2012-04-18 10:50:31

+0

權,也許你應該在訪問MyForm.fields之前調用父__init__ – jpic 2012-04-18 11:19:53

+0

如果我這樣做,我有以下錯誤(這是有道理的): TypeError __init __()得到一個意外的關鍵字參數'root_entity'。 (實際上我沒有看到你改變了你的初始答案中的行順序) – user1257144 2012-04-18 11:26:44

相關問題