强制CharField的选择

时间:2017-06-03 06:43:05

标签: django model django-orm

我的模型中有少量models.CharField个对象,choices属性。

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

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

2 个答案:

答案 0 :(得分:1)

你可以Rail 4.1 upgrade notes你的模型提出你自己的例外:

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)

答案 1 :(得分:0)

你可以使用模型清理方法,

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.")