我需要为ModelChoiceField
设置一个默认值
该值是从我的views.py
发送的。
我一直在寻找其他类似的问题,但这并没有真正的帮助,因为有关ChoiceField
的{{1}}而不是choices
的{{1}} >
views.py
ModelChoiceField
forms.py
queryset
这就是它的外观,def edit_package(request, pk):
current_package = get_object_or_404(models.Package, pk=pk)
edit_package_form = forms.EditPackageForm(request.POST, name=current_package.package_name,
teacher=current_package.package_teacher_name,
level=current_package.package_level,
subject=current_package.package_subject,
price=current_package.package_price)
if request.method == 'POST':
if edit_package_form.is_valid():
pass
else:
edit_package_form = forms.EditPackageForm(request.POST, name=current_package.package_name,
teacher=current_package.package_teacher_name,
level=current_package.package_level,
subject=current_package.package_subject,
price=current_package.package_price)
context = {
'current_package': current_package,
'edit_package_form': edit_package_form,
}
return render(request, 'edit_package.html', context)
和class EditPackageForm(forms.Form):
def __init__(self, *args, **kwargs):
current_name = kwargs.pop("name")
current_teacher = kwargs.pop("teacher")
current_level = kwargs.pop("level")
current_subject = kwargs.pop("subject")
current_price = kwargs.pop("price")
super(EditPackageForm, self).__init__(*args, **kwargs)
self.fields['package_name'] = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control', 'value': current_name}))
self.fields['teacher_name'] = forms.ModelChoiceField(queryset=models.Teacher.objects.all(),
initial=current_teacher,
widget=forms.Select(attrs={'class': 'form-control'}),
required=False)
self.fields['level_name'] = forms.ModelChoiceField(queryset=models.Level.objects.all(),
initial=current_level,
widget=forms.Select(attrs={'class': 'form-control'}),
required=False)
self.fields['subject_name'] = forms.ModelChoiceField(queryset=models.Subject.objects.all(),
initial=current_subject,
widget=forms.Select(attrs={'class': 'form-control'}),
required=False)
self.fields['package_price'] = forms.IntegerField(
widget=forms.NumberInput(attrs={'class': 'form-control', 'value': current_price}))
是默认值,但是TextInput
不能与NumberInput
一起使用
答案 0 :(得分:2)
例如,在ModelChoiceField中输入老师的姓名,您正在从视图发送姓名,这是错误的,因为您必须将老师的ID发送给表单,并且该ID会在初始时分配。其余的应该做同样的事情。
edit_package_form = forms.EditPackageForm(request.POST, name=current_package.package_name,
teacher=current_package.package_teacher_id,
level=current_package.package_level_id,
subject=current_package.package_subject_id,
price=current_package.package_price)