简体   繁体   English

__init__() 为参数“crescator”获得了多个值

[英]__init__() got multiple values for argument 'crescator'

I have a ModelForm and in a ModelChoiceField I need to filter objects by request.user.我有一个 ModelForm 并且在 ModelChoiceField 中我需要通过 request.user 过滤对象。 When data is submitted, I got the error " init () got multiple values for argument 'crescator' ".提交数据时,我收到错误消息“ init () 为参数‘crescator’获取了多个值”。 How can I repair that?我怎样才能修复它?

#My Form
class AdaugaPereche(forms.ModelForm):
    boxa = forms.IntegerField(label="Boxa", min_value=1)
    sezon = forms.CharField(label="Sezon reproducere", initial=datetime.now().year)
    mascul = forms.ModelChoiceField(queryset=None, label="Mascul", empty_label="Alege mascul")
    femela = forms.ModelChoiceField(queryset=None, label="Femela", empty_label="Alege femela")

    serie_pui_1 = forms.TextInput()
    serie_pui_2 = forms.TextInput()
    culoare_pui_1 = forms.ModelChoiceField(queryset=None, label="Culoare pui 1", empty_label="Alege culoarea",
                                       required=False)
    culoare_pui_2 = forms.ModelChoiceField(queryset=None, label="Culoare pui 2", empty_label="Alege culoarea",
                                       required=False)
    data_imperechere = forms.DateInput()
    primul_ou = forms.DateInput()
    data_ecloziune = forms.DateInput()
    data_inelare = forms.DateInput()
    comentarii = forms.TextInput()

    # Functie pentru filtrarea rezultatelor dupa crescator
    def __init__(self, crescator, *args, **kwargs):
        super(AdaugaPereche, self).__init__(*args, **kwargs)
        self.fields['mascul'].queryset = Porumbei.objects.filter(crescator=crescator, sex="Mascul",                                                                 
                    perechi_masculi__isnull=True)
        self.fields['femela'].queryset = Porumbei.objects.filter(crescator=crescator, sex="Femelă",
                    perechi_femele__isnull=True)
        self.fields['culoare_pui_1'].queryset = CuloriPorumbei.objects.filter(crescator=crescator)
        self.fields['culoare_pui_2'].queryset = CuloriPorumbei.objects.filter(crescator=crescator)

    class Meta:
        model = Perechi
        fields = "__all__"


#My view
def perechenoua(request):
    if request.method == "POST":
        form = AdaugaPereche(request.POST, crescator=request.user)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.crescator = request.user
            obj.save()
            return HttpResponseRedirect("/perechi/")
        else:
            form = AdaugaPereche(crescator=request.user)
    context = {
        'form': form
}
    template = loader.get_template("adauga-pereche.html")
    return HttpResponse(template.render(context, request))

May the problem be obj = form.save(commit=False) obj.crescator = request.user obj.save() ?问题可能是 obj = form.save(commit=False) obj.crescator = request.user obj.save() 吗?

The __init__ function of the form signature takes as first parameter here crescator , but you pass request.POST as that parameter, and furthermore you also pass this as a named parameter.表单签名的__init__函数在这里将crescator作为第一个参数,但是您将request.POST作为该参数传递,此外,您还将它作为命名参数传递。 By reordening the parameter, this should work:通过重新排列参数,这应该可以工作:

class AdaugaPereche(forms.ModelForm):

    # ...

    def __init__(self, *args, crescator=None, **kwargs):
        super(AdaugaPereche, self).__init__(*args, **kwargs)
        self.fields['mascul'].queryset = Porumbei.objects.filter(crescator=crescator, sex="Mascul",                                                                 
                    perechi_masculi__isnull=True)
        self.fields['femela'].queryset = Porumbei.objects.filter(crescator=crescator, sex="Femelă",
                    perechi_femele__isnull=True)
        self.fields['culoare_pui_1'].queryset = CuloriPorumbei.objects.filter(crescator=crescator)
        self.fields['culoare_pui_2'].queryset = CuloriPorumbei.objects.filter(crescator=crescator)

    # ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 __init__() 为参数“填充”获得了多个值 - __init__() got multiple values for argument 'padding' TypeError:__init __()为参数'n_splits'获取了多个值 - TypeError: __init__() got multiple values for argument 'n_splits' __init__() 为关键字参数“列”获得了多个值 - __init__() got multiple values for keyword argument 'columns' TypeError:__init __()为参数'fieldnames'获得了多个值 - TypeError: __init__() got multiple values for argument 'fieldnames' 类型错误:__init__() 为参数“strides”获得了多个值 - TypeError: __init__() got multiple values for argument 'strides' TypeError:__init__() 为参数“轴”获取了多个值 - TypeError: __init__() got multiple values for argument 'axes' Python TypeError:__ init __()为参数'master'获取了多个值 - Python TypeError: __init__() got multiple values for argument 'master' TypeError:__init __()为关键字参数“ choices”获得了多个值 - TypeError: __init__() got multiple values for keyword argument 'choices' windrose:__init __()获得了多个关键字参数值 - windrose: __init__() got multiple values for keyword argument TypeError:“ __ init __()为关键字参数'name'获得了多个值” - TypeError: “__init__() got multiple values for keyword argument 'name'”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM