python - __init__() 为参数“crescator”获得了多个值
问题描述
我有一个 ModelForm,在 ModelChoiceField 中我需要按 request.user 过滤对象。提交数据时,出现错误“ init () got multiple values for argument '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)
# ...
推荐阅读
- home-assistant - 根据 Homeassistant 控制的湿度读数打开风扇
- python - 无法更新 us-central1 中的加密密钥
- amazon-web-services - IAM 角色 - AssumeRolepolicy 包含无效的委托人:“STAR”:“*”
- javascript - 在我的 db.collection forEach 上使用 Promise.all
- python - 测试 Django 视图函数
- react-native - 在屏幕之间切换时如何不改变变量中的值?
- intellij-idea - 更改运行/调试配置的 IntelliJ 默认测试框架
- python - 仅将 pandas 行的所有字符串值添加为新列中的列表
- java - 处理:ArrayIndexOutOfBoundsException,我该如何解决?
- python - Python 常规前