在is_valid()之后将django表单设置为错误

Str*_*yer 5 django django-forms

我需要在使用is_valid()验证表单后调用API函数.此API调用仍然可以抛出异常,这反过来可能会使表单中的字段无效.

我怎样才能做到这一点?我正在寻找类似的东西:

def smstrade(request):
    if request.method == "POST":
        form = SomeForm(request.POST)
        if form.is_valid():
            try:
                api_call(...)
            except SomeException:
                form["field"].set_valid(False)
Run Code Online (Sandbox Code Playgroud)

小智 6

稍晚,但您可以通过设置form._errors使表单无效并添加显示相应的消息

>>> f.is_valid()
True
>>> f._errors['my_field'] = ['This field caused a problem']
>>> f.is_valid()
False
>>> str(f)
... <ul class="errorlist"><li>This field caused a problem</li></ul>
Run Code Online (Sandbox Code Playgroud)

我需要使用FormView.form_valid()具有唯一字段的方法和模型来完成此操作

def form_valid(self, form):
  obj = User(**form.cleaned_data)
  try:
    obj.save()
  except IntegrityError:
    form._errors['username'] = ['Sorry, already taken']
    return super(MyView, self).form_invalid(form)

  return super(MyView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

  • 根据[这个答案](/sf/answers/1964078791/),您现在应该使用“Form.add_error”,而不是直接注入错误。 (2认同)

Bur*_*lid 3

最好重写您感兴趣的字段的clean 方法并在那里添加您的逻辑。这样,您也可以输出适当的错误消息。