强制 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.")
我的模型中只有几个 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.")