我正在处理的问题是格式错误“输入由字母、数字、下划线或连字符组成的有效'slug‘”。
以下是我的表单字段验证:
def clean_slug(self):
slug = self.cleaned_data['slug']
if slug.endswith('/'):
self.cleaned_data['slug'] = slug[:-1]
slug_check = self.organizer.events.filter(slug=slug).exclude(pk=self.event.pk).exists()
if slug_check:
raise forms.ValidationError(_("Slug already exists"), code='duplicated_slug')
return slug不知怎么的,当is_valid()被调用时,Django并没有考虑我的self.cleaned_data['slug'] = slug[:-1]。你知道为什么吗?
发布于 2019-01-26 12:14:34
您正在修改cleaned_data['slug'],这将不会产生任何影响。Django将使用您从该方法返回的内容,而您返回的是原始的(未修改的) slug。从documentation
此方法的返回值将替换cleaned_data中的现有值,因此它必须是来自cleaned_data的字段的值(即使此方法没有更改它)或新清理的值。
将其更改为:
def clean_slug(self):
slug = self.cleaned_data['slug']
if slug.endswith('/'):
slug = slug[:-1] # <-- Modify slug, not cleaned_data['slug']
slug_check = self.organizer.events.filter(slug=slug).exclude(pk=self.event.pk).exists()
if slug_check:
raise forms.ValidationError(_("Slug already exists"), code='duplicated_slug')
return slug # <-- return modified valuehttps://stackoverflow.com/questions/54373652
复制相似问题