簡體   English   中英

__init__() 為參數“crescator”獲得了多個值

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

我有一個 ModelForm 並且在 ModelChoiceField 中我需要通過 request.user 過濾對象。 提交數據時,我收到錯誤消息“ init () 為參數‘crescator’獲取了多個值”。 我怎樣才能修復它?

#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))

問題可能是 obj = form.save(commit=False) obj.crescator = request.user obj.save() 嗎?

表單簽名的__init__函數在這里將crescator作為第一個參數,但是您將request.POST作為該參數傳遞,此外,您還將它作為命名參數傳遞。 通過重新排列參數,這應該可以工作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM