1

我需要为ModelChoiceField

该值是从我的views.py.

我已经寻找了一些其他类似的问题,但它并没有真正帮助,因为这一切都ChoiceFieldchoicesnot a ModelChoiceFieldwithqueryset

视图.py

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)

表格.py

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

这就是它的外观,TextInputNumberInput具有默认值,但initial不适用于ModelChoiceField

截屏

4

1 回答 1

3

例如,在教师姓名的 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)
于 2019-03-26T15:10:31.330 回答