简体   繁体   中英

__init__() got multiple values for argument 'crescator'

I have a ModelForm and in a ModelChoiceField I need to filter objects by request.user. When data is submitted, I got the error " init () got multiple values for argument '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() ?

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. By reordening the parameter, this should work:

class AdaugaPereche(forms.ModelForm):

    # ...

    def __init__(self, *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)

    # ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM