Django CharField 限制
我想知道怎么给一个字符字段(CharField)设置一个黑名单。不过我希望这个黑名单在Django的管理面板里也能生效……要不然我就只在视图里验证了。
这里说的黑名单是指那些不能使用的值。我已经把这个值设置为唯一(unique),但我还想禁用一些特定的字符串。
谢谢,
Max
3 个回答
4
因为我们已经过了几年,所以你应该写一个自定义的黑名单验证器:
from django.db import models
from django.core.exceptions import ValidationError
def validate_blacklist(value):
if value in ['a', 'b', 'c']:
raise ValidationError(
"'a', 'b' and 'c' are prohibited!",
params={'value': value},
)
class MyModel(models.Model):
even_field = models.CharField(max_length=200, validators=[validate_even])
可以查看:Django 验证器 获取完整的文档。
2
我会重写模型的save()方法,在调用父类的save()方法之前,先把要插入的值和一个黑名单进行对比。
大概是这样的(简化版):
class BlackListModel(models.Model):
blacklist = ['a', 'b', 'c']
# your model fields definitions...
def save(self, *args, **kwargs):
if self.blacklist_field in self.blacklist:
raise Exception("Attempting to save a blacklisted value!")
return super(BlackListModel, self).save(*args, **kwargs)
这样的话,在你所有的应用程序中都能正常工作。