У меня есть эта модель:
class IeltsExam(Model):
student = OneToOneField(Student, on_delete=CASCADE)
has_taken_exam = BooleanField(default=False,)
listening = FloatField(choices=SCORE_CHOICES, null=True, blank=True, )
reading = FloatField(choices=SCORE_CHOICES, null=True, blank=True, )
exam_date = DateField(null=True, blank=True, )
non_empty_fields = \
{
'listening': 'please enter your listening score',
'reading': 'please enter your reading score',
'exam_date': 'please specify your exam date',
}
def clean(self):
errors = {}
if self.has_taken_exam:
for field_name, field_error in self.non_empty_fields.items():
if getattr(self, field_name) is None:
errors[field_name] = field_error
if errors:
raise ValidationError(errors)
, и у меня есть эта модель
class IeltsExamForm(ModelForm):
class Meta:
model = IeltsExam
fields = ('has_taken_exam', 'listening', 'reading', )
, когда я отправляю эту форму в шаблоне, я получаю следующую ошибку:
ValueError at /
'ExamForm' has no field named 'exam_date'.
и
During handling of the above exception ({'listening': ['please enter your listening score'], 'reading': ['please enter your reading score'], 'exam_date': ['please specify your exam date']}), another exception occurred:
Ошибка происходит на мой взгляд, когда я проверяю форму. Моя логика базы данных такова, что мне нужно иметь поле exam_date, и оно должно быть обязательным для заполнения, если проверен has_taken_exam. Однако в ExamForm по деловым причинам мне не нужна дата экзамена. Как я могу сказать ExamForm закрыть глаза на дату экзамена, так как я не сохраняю экземпляр модели?