我当前正在为其中一种表单使用forms.Form
类型,因为我需要为其指定许多参数,例如queryset,disabled,required。
我在forms.py
中讨论的参数片段
class InputClassInformation(forms.Form):
module = forms.ModelChoiceField(queryset=Module.objects.all())
title = forms.CharField(disabled=True, required=False)
该表格将允许用户更新条目中的某些字段,这意味着我将不得不使用instance
参数,如此处https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#the-save-method所示。但是,在views.py
if Class.objects.filter(module__subject=subject).exists():
a = Class.objects.filter(module__subject=subject)[0].pk
form = InputClassInformation(request.POST, instance=a)
错误:
TypeError at /input-class-info/
__init__() got an unexpected keyword argument 'instance'
我知道如果我使用ModelForm
会很好,但是尝试在ModelForm
中指定我需要的所有参数很困难,所以有没有办法我可以指定实例是否想在使用forms.Form
时进行更新?
答案 0 :(得分:0)
由于无法找到答案,因此我不确定这是否是一个愚蠢的问题,因此无论如何我都会发布答案。
就像问题中提到的@DanielRoseman一样,我们可以通过在ModelForms中使用相同的代码来实例化相同的字段。就我而言,我只是将表格更改为:
class InputClassInformation(forms.ModelForm):
class Meta:
model = Class
fields = '__all__'
module = forms.ModelChoiceField(queryset=Module.objects.all())
title = forms.CharField(disabled=True, required=False)
现在我可以使用实例了!