为django ModelChoiceField设置默认值

时间:2019-03-26 12:50:49

标签: python django django-forms modelchoicefield

我需要为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一起使用

Screen_shot

1 个答案:

答案 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)