添加字段到Django表单中不存在的模型



我有一个学生模型来保存学生的数据。

Models.py

class Student(models.Model):
roll_no = models.IntegerField(editable=True, blank=False, primary_key=True)
name = models.CharField(max_length=30)
date_of_birth = models.DateField(default='1900-01-01', blank=True)
admission_no = models.IntegerField(default=roll_no)
admission_date = models.DateField(default=datetime.now)
student_cnic = models.CharField(max_length=15)
father_cnic = models.CharField(max_length=15)
grade = models.ForeignKey('school.SchoolClasses', on_delete=models.CASCADE, null=True, blank=True)
mobile = models.CharField(max_length=12)
active = models.BooleanField(default=True)

学生表格看起来像

Forms.py

class StudentForm(forms.ModelForm):
extra_fields = ['school']
class Meta:
model = Student
fields = ['roll_no', 'name', 'date_of_birth', 'admission_no', 'admission_date', 'student_cnic', 'father_cnic',
'mobile', 'grade']

def __init__(self, *args, **kwargs):
super(StudentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(Row(Column('roll_no', css_class='form-group col-md-6'),
Column('admission_no', css_class='form-group col-md-6'), ),
Row(Column('date_of_birth', css_class='form-group col-md-6'),
Column('admission_date', css_class='form-group col-md-6'), ),
Row(Column('name', css_class='form-group col-md-3'),
Column('student_cnic', css_class='form-group col-md-3'),
Column('father_cnic', css_class='form-group col-md-3'),
Column('mobile', css_class='form-group col-md-3'), ),
Row(
Column('school', css_class='form-group col-md-3'),
Column('grade', css_class='form-group col-md-3'),
),
Submit('submit', 'Add Student', css_class='btn btn-primary'), )
self.fields['date_of_birth'].widget = forms.DateInput(attrs={'type': 'date'})
self.fields['admission_date'].widget = forms.DateInput(attrs={'type': 'date'})

学校字段仅用于筛选成绩字段的结果,以仅返回所选学校中存在的成绩

但是我得到一个错误KeyError: "Key 'school' not found in 'StudentForm'. Choices are: admission_date, admission_no, date_of_birth, father_cnic, grade, mobile, name, roll_no, student_cnic."

你必须定义school字段的形式。学校因为不是modelStudent的字段. Add AddschoolMeta类。您的表单将如下所示:

class StudentForm(forms.ModelForm):
school = forms.ModelChoiceField(queryset=School.objects.all())
class Meta:
model = Student
fields = ['roll_no', 'name', 'date_of_birth', 'admission_no', 'admission_date', 'student_cnic', 'father_cnic',
'mobile', 'grade', 'school']

def __init__(self, *args, **kwargs):
super(StudentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(Row(Column('roll_no', css_class='form-group col-md-6'),
Column('admission_no', css_class='form-group col-md-6'), ),
Row(Column('date_of_birth', css_class='form-group col-md-6'),
Column('admission_date', css_class='form-group col-md-6'), ),
Row(Column('name', css_class='form-group col-md-3'),
Column('student_cnic', css_class='form-group col-md-3'),
Column('father_cnic', css_class='form-group col-md-3'),
Column('mobile', css_class='form-group col-md-3'), ),
Row(
Column('school', css_class='form-group col-md-3'),
Column('grade', css_class='form-group col-md-3'),
),
Submit('submit', 'Add Student', css_class='btn btn-primary'), )
self.fields['date_of_birth'].widget = forms.DateInput(attrs={'type': 'date'})
self.fields['admission_date'].widget = forms.DateInput(attrs={'type': 'date'})

不要忘记导入SchoolModel in forms:

from school.models import School

相关内容