我希望失败:
MyModelWithSlug.objects.create(name='Foo', slug='abc . ü')
字符串abc . ü
不是django中的有效slug。
如何使上线失败?
答案 0 :(得分:2)
阅读Alasdair对OP的评论
Django提供了一个名为 CLEAN 的钩子来添加自定义验证,但要注意Django不会在save
或create
上自动调用它。所以你必须在模型上覆盖save()
。(感谢@alasdair纠正我。)
因此模型变为:
class MyModelWithSlug(models.Model):
name = models.CharField(max_length=200, default="")
slug = models.CharField(max_length=200, null=True, blank=True)
def clean(self):
# will raise an Validation Error even if unicode is present. refer validate_unicode_slug
self.slug = validators.validate_slug(self.slug)
def save(self):
self.full_clean() # calls self.clean() as well cleans other fields
return super(MyModelWithSlug, self).save(*args, **kwargs)
class MyModelWithSlug(models.Model):
name = models.CharField(max_length=200, default="")
slug = models.SlugField(max_length=200, null=True, blank=True)
<强> VALIDATE SLUG LINK 强>
<强> SLUG FIELD LINK 强>