is_valid返回true后,Django表单保存错误

时间:2018-07-18 10:16:20

标签: django django-forms

处理form.save()上的错误的最佳实践是什么?例如,电子邮件唯一检查将在数据库级别的保存中完成,而不是在is_valid()上进行。

def user_registration(request):
    from accounts.forms import UserRegistrationForm
    form = UserRegistrationForm(request.POST)
    if not form.is_valid():
        return {
            'errors': form.errors.as_json(escape_html=False)
        }
    ### This can still return error, how to handle it? try catch?
    user = form.save()
    return {
        'user': user.id,
    }

2 个答案:

答案 0 :(得分:1)

理想情况下,表单类上应该有clean_email方法来检查电子邮件是否已经存在。完成所有验证后,应调用save方法。

答案 1 :(得分:0)

在进行表单验证之前先捕获电子邮件。您可以做类似的事情

if request.method == 'POST':
     email = request.POST.get("email")
     if User.objects.filter(email__iexact=email).exists():
         form.add_error("email","Email exists")

     if not form.is_valid():
         return {
             'errors': form.errors.as_json(escape_html=False)
         }
     user = form.save()
相关问题