Тест 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.

Я не могу понять, почему эти тесты все еще не работают.

Вернуться на верх