Тест Django ModelForm не работает, но html присутствует?
Пытаюсь написать очень простой тест для начала ModelForm в Django.
Моя модель:
# models.py
class Grade(models.Model):
paper = models.ForeignKey(
Paper, on_delete=models.PROTECT, related_name="grades"
)
exam = models.ForeignKey(
Exam, on_delete=models.PROTECT, related_name="grades"
)
level = models.ForeignKey(
Level,
on_delete=models.PROTECT,
null=True,
blank=True,
related_name="grades",
)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)
created_by = models.ForeignKey(
User, on_delete=models.PROTECT, related_name="%(class)s_created_by"
)
updated_by = models.ForeignKey(
User, on_delete=models.PROTECT, related_name="%(class)s_updated_by"
)
deleted_at = models.DateTimeField(blank=True, null=True)
class Meta:
verbose_name = "Grade"
verbose_name_plural = "Grades"
Моя форма выглядит следующим образом:
# forms.py
class GradeForm(ModelForm):
class Meta:
model = Grade
fields = [
"exam",
"level",
"paper",
"created_by",
"deleted_at",
"updated_by",
]
Мои тесты выглядят следующим образом:
#test_forms.py
class GradeForm(TestCase):
def setUp(self):
self.grade = GradeFactory()
def test_empty_form_fields(self):
# THIS PASSES
form = GradeForm()
self.assertIn("created_by", form.fields)
self.assertIn("deleted_at", form.fields)
self.assertIn("exam", form.fields)
self.assertIn("level", form.fields)
self.assertIn("paper", form.fields)
self.assertIn("updated_by", form.fields)
def test_empty_form_html_elements(self):
form = GradeForm()
# THESE THREE ASSERSTIONS FAIL:
# But I can see the HTML in the debugger if I print(form.as_p())
# And the HTML is exactly as it is below in the assertions...
self.assertInHTML(
'<select name="exam" required id="id_exam">',
form.as_p(),
)
self.assertInHTML(
'<select name="paper" required id="id_paper">',
form.as_p(),
)
self.assertInHTML(
'<select name="level" id="id_level">',
form.as_p(),
)
def test_form(self):
form = GradeForm(
data={
"expectation": self.grade.exam.id,
"summary": self.grade.paper.id,
"expectation_level": self.grade.level.id,
"created_by": self.grade.created_by.id,
"deleted_at": None,
"updated_by": self.grade.updated_by.id,
}
)
# THIS FAILS: It says the choices are 'not a valid choice' in form.errors...
self.assertTrue(form.is_valid())
Я упускаю что-то очевидное?
Я просто пытаюсь проверить "валидную" форму, убедиться, что "пустая" форма отображает правильный HTML.
Я не могу понять, почему эти тесты все еще не работают.