2010-11-26 53 views
0

我有一個表單處理驗證中的m2m請求。Django super __init__導致m2m表單無法驗證

我的形式看起來如下

class HuntingReportForm(ModelForm): 
    date_travel_started = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2010))) 
    date_travel_ended = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2010))) 
    wish_list = forms.ModelMultipleChoiceField(queryset=Specie.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False), required=False) 
    bag_list = forms.ModelMultipleChoiceField(queryset=Trophies.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False), required=False) 

class Meta: 
    model = HuntingReport 
    exclude = ['user',] 

def __init__(self, user, *args, **kwargs): 
    self.validate = kwargs.pop('validate',False) 
    super(HuntingReportForm, self).__init__(*args, **kwargs) 

    users = User.objects.filter(userprofile__outfitter=True) 
    self.fields['outfitter'].choices = [('', '')] + [(user.pk, user.get_full_name()) for user in users] 
    self.fields.keyOrder = ['title', 'report', 'date_travel_started', 'date_travel_ended', 'wish_list', 'bag_list', 'outfitter'] 

當我刪除整個部分的形式似乎驗證和保存,但是用下面的代碼,它只是不斷扔我回頁說,某些字段間沒有即使他們在,也沒有填滿。

任何想法?

回答

1

您不顯示視圖,但可能是您正在使用通常的form = HuntingReportForm(request.POST)實例化窗體。不幸的是,您已更改表格__init__方法的簽名,以期望user作爲第一個位置參數,所以數據未被傳入。您應該將user移動到kwargs並將其視爲與validate參數相同:

def __init__(self,*args, **kwargs): 
    user = kwargs.pop('user', None) 
    self.validate = kwargs.pop('validate', False) 
    super(HuntingReportForm, self).__init__(*args, **kwargs) 
+0

謝謝,我會試試看,並讓你知道結果 – ApPeL 2010-11-26 09:18:53