【发布时间】:2020-11-26 17:01:10
【问题描述】:
我有一个非常简单的表单,我正在对它进行一些验证:
def clean(self):
cleaned_data = super().clean()
start = cleaned_data.get("start")
end = cleaned_data.get("end")
if start >= end:
raise ValidationError("start should not be greater than end.")
但我需要添加另一个验证(基于发出请求的用户)。
我尝试将参数添加到 clean 方法中:
def clean(self, user):
cleaned_data = super().clean()
start = cleaned_data.get("start")
end = cleaned_data.get("end")
if start >= end:
raise ValidationError("start should not be greater than end.")
if not user.email.endswith("@example.com"):
raise ValidationError("blah...")
很遗憾,我无法在视图中使用参数调用 is_valid():
if form.is_valid(request.user):
....
我收到以下错误消息:
is_valid() 接受 1 个位置参数,但给出了 2 个
我还尝试在表单中添加一个新方法:
def validate_email(self, user):
if not user.email.endswith("@example.com")::
raise ValidationError("blah...")
并从视图中调用它:
if form.is_valid() and form.validate_email(request.user):
obj = form.save(commit=False)
obj.created_by = request.user
obj.save()
在这种情况下,异常确实会被抛出并使应用程序崩溃。
我的目标是:
- 根据请求中的标准进行验证
- 在验证失败时正常显示错误消息
实现自定义验证的正确方法是什么?
【问题讨论】:
标签: python django django-forms