Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django super\uuuu init\uuuuu导致m2m表单无法验证_Django_Django Forms_Django Orm - Fatal编程技术网

Django super\uuuu init\uuuuu导致m2m表单无法验证

Django super\uuuu init\uuuuu导致m2m表单无法验证,django,django-forms,django-orm,Django,Django Forms,Django Orm,我有一个表单处理验证中的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,201

我有一个表单处理验证中的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']
当我删除整个
def\uuuu init\uuuu
部分时,表单似乎进行了验证和保存,但是使用下面的代码,它总是让我返回页面,说一些字段没有填写,即使在填写时也是如此


有什么想法吗?

您没有显示视图,但可能您正在使用通常的
form=HuntingReportForm(request.POST)
实例化表单。不幸的是,您已将表单的
\uuuu init\uuu
方法的签名更改为将
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)

谢谢,我会试试看,然后告诉你结果