我有一个定义如下的Django模型:
class Category(models.Model):
name = models.CharField(max_length=100, unique=True)
slug = models.SlugField(unique=True)
虽然两者都被定义为uniqe,但是django admin允许我添加“python”,“Python”,“PYTHON”等类别。我知道这是默认行为。
为了防止这种情况,我在Category模型中创建了一个clean()
方法,如下所示:
def clean(self, *args, **kwargs):
from django.core.exceptions import ValidationError
slug = slugify(self.name.lower())
r = Category.objects.filter(slug=slug)
print("size")
print(r.count())
if r:
raise ValidationError("Category with this name already exists. Try again with a new name.")
self.slug = slug
super(Category, self).clean(*args, **kwargs)
适用于大多数情况。但是,假设数据库已经有Python
类别,如果我再次尝试添加Python
,它会向我显示两个错误,一个来自clean()
方法,另一个来自validate_unique()
方法。这是它的外观。
我想只显示一条消息是否有办法阻止它。有没有办法覆盖这种行为或其他东西。提前谢谢。
答案 0 :(得分:1)
来自docs:
要为特定字段分配例外,请使用字典实例化ValidationError,其中键是字段名称。
if r:
raise ValidationError({'name': ["Category with this name already exists.",]})