强制 CharField 的选择

Force CharField's Choices

我的模型中只有几个 models.CharField 对象,具有 choices 属性。

就 GUI 而言,这工作得很好,但我想阻止代码本身的 choices 属性中指定的值以外的值(以保护自己免受错误影响)。

在尝试保存不在选择列表中的字符串时,有没有办法引发异常(我相信它会是 ValueError)?

您可以 override the save method 您的模型来引发您自己的异常:

class MyModel:

    MY_CHOICES = (
        # choices here
    )

    myfield = models.CharField(max_length=100, choices=MY_CHOICES)

    def save(self, *args, **kwargs):
        choice = self.myfield
        if not any(choice in _tuple for _tuple in self.MY_CHOICES):
            raise ValueError('An error message.')
        super(MyModel, self).save(*args, **kwargs)

您可以为此使用模型清理方法,

class YourModel(models.Model):
    CHOICES = ('your_choices_here',)

    def clean(self):
        if not any(self.field_name in item for item in self.CHOICES):
            raise ValueError("Your error message here.")