Django Postgres 没有对字段选择进行验证?

Ana*_*tol 9 python django postgresql modelchoicefield

我创建了一个带有字段选择的学生模型。但是,当我保存它时,它不会验证该选择是否在我在模型字段中指定的选择中。

为什么它不会阻止我使用模型中未指定的选项保存新对象?

这是模型:

class Student(models.Model):
    year_in_school = models.CharField(
        max_length=4,
        choices= [
            ('FRES', 'Freshman'),
            ('SOPH', 'Sophomore'),
        ],
    )

Run Code Online (Sandbox Code Playgroud)

这是我在 shell 中编写的代码:

>>> from app.models import Student
>>> new_student = Student.objects.create(year_in_school='HACK')
>>> new_student.year_in_school
'HA'
Run Code Online (Sandbox Code Playgroud)

Dip*_*iya 12

您可能想在此处阅读有关选择的更多信息。相关部分复制如下:

\n\n
\n

如果给出选择,则它们\xe2\x80\x99由模型验证强制执行

\n
\n\n

选择不是在数据库级别强制执行的。您需要执行模型验证(通过调用full_clean())才能检查它。

\n\n

full_clean()当您调用 model\xe2\x80\x99s 方法时,不会自动调用save()。你\xe2\x80\x99需要手动调用它。

\n

  • 是的。我们可以在调用`super().save()`之前覆盖`save()`并调用`full_clean()`。 (2认同)