【问题标题】:How to handle django model forms error in view.py file?如何处理 view.py 文件中的 django 模型表单错误?
【发布时间】:2020-10-10 05:41:52
【问题描述】:

这是我的 forms.py 文件。我们可以通过 forms.py 中的 clean 方法验证表单数据

from django import forms
from django.core.exceptions import ValidationError


    class ContactForm(forms.Form):
        # Everything as before.
        ...
    
        def clean_recipients(self):
            data = self.cleaned_data['recipients']
            if "fred@example.com" not in data:
                raise ValidationError("You have forgotten about Fred!")
    
            # Always return a value to use as the new cleaned data, even if
            # this method didn't change it.

但我想验证 view.py 中的一些数据。我们可以这样做吗?在 view.py 文件中

class Test(View) :
    def get(self,request):
      #Get logic 
   def post(self,request):
      form = ContactForm(request.POST or None)
      if form.is_valid():
          num = form.cleaned_data['num']
          
          if '123' in num:
               form.add_error('num','Not valid')
          else:
               form.save()
              
      return render(request,self.template_name,{'form':form})

在 view.py 而不是 forms.py 中处理表单错误的方法是什么

【问题讨论】:

  • 您可以使用消息,或将表单错误作为上下文传递给您的模板。

标签: python django-forms django-views django-templates


【解决方案1】:

使用消息

  1. views.py

    from django.contrib import messages
    class Test(View) :
        def post(self,request):
            form = ContactForm(request.POST or None)
            if form.is_valid():
                num = form.cleaned_data['num']
    
                if '123' in num:
                    messages.error(request, 'Not valid')
                else:
                    form.save()
    
            return render(request,self.template_name,{'form':form})
    
  2. 模板

    {% if messages %}
        {% for message in messages %}
            <p>{{ message }}</p>
        {% endfor %}
    {% endif %}
    

另一种方法是将错误作为上下文传递

  1. Views.py

    from django.contrib import messages
    class Test(View) :
        def post(self,request):
            form = ContactForm(request.POST or None)
            if form.is_valid():
                num = form.cleaned_data['num']
    
                if '123' in num:
                    num = 'Not Valid'
                else:
                    form.save()
    
            return render(request,self.template_name,{'form':form,'num':num})
    
  2. 然后在模板中使用变量

    {{num}}
    

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多