簡體   English   中英

Django-ValidationError不顯示

[英]Django - ValidationError does not display

我最近嘗試了表單驗證,並遇到ValidationError()問題。

提交表單時,表單錯誤未出現在我的網站上。

這是代碼:

表格

class ArticleForm(forms.ModelForm):

    def clean_titre(self):
        titre = self.cleaned_data['titre']
        if len(titre) < 5:
            raise ValidationError('myError')
        return titre

form = ArticleForm()

template.html

<div class="form-group">TITRE
  {{ form.titre.errors }}
  {{ form.titre }}
</div>

views.py

def AddArticle(request):
    form = ArticleForm(request.POST, request.FILES)

    if form.is_valid():
        save_it = form.save(commit=False)
        save_it.user = request.user
        save_it.save()
        form.save_m2m()
        return HttpResponseRedirect('/')

我做錯了什么?

-編輯-

完整template.html

<form class="form" action="{% url "article.views.AddArticle" %}" method="post" enctype='multipart/form-data'>
    {% csrf_token %}

    <div class="form-group">TITRE
      {{ form.titre.errors }}
      {{ form.titre }}
    </div>
    <div class="form-group">SUMMARY
      {{ form.media }}
      {{ form.summary.errors }}
      {{ form.summary }}
    </div>
    <div class="form-group">CONTENU
      {{ form.media }}
      {{ form.contenu.errors }}
      {{ form.contenu }}
    </div>
    <div class="form-group">
      {{ form.image.errors }}
      {{ form.image }}
   </div>
   <div class="form-group">TAGS
      {{ form.tags.errors }}
      {{ form.tags }}
   </div>
   <input type="submit" class="btn btn-default" value="Submit" autocomplete="off" autocorrect="off" />
</form>

我也會發布完整的forms.py,這可能會有所幫助。

表格

class ArticleForm(forms.ModelForm):

    def clean_titre(self):
        titre = self.cleaned_data['titre']
        if len(titre) < 5:
            raise ValidationError('myError')
        return titre

    class Meta:
        model = Article
        exclude = ['date', 'rating', 'user']

        widgets={
            "titre":forms.TextInput(attrs={'placeholder':'Le titre', 'class':'form-control'}),
            "contenu":forms.Textarea(attrs={'placeholder':'Le Contenu de votre message', 'class':'form-control'}),
            "image":forms.FileInput(attrs={'placeholder':'Votre Image', 'id':'uploadBtn'}),
            "tags":TagWidget(attrs={'placeholder':'Vos Tags', 'class':'form-control'}),
        }

form = ArticleForm()

您缺少視圖中的else部分。 以下是表格通常執行的一般流程:

  1. 用戶通過GET導航到頁面,該頁面向他們顯示一個表單
  2. 用戶填寫表格並使用POST提交
  3. 如果表單有效,則將用戶定向到其他頁面
  4. 如果表單無效,將向用戶顯示與步驟1相同的頁面,並顯示驗證錯誤。 用戶更正它們之后,將繼續執行步驟2。

這是Django視圖中的流程:

def AddArticle(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            save_it = form.save(commit=False)
            save_it.user = request.user
            save_it.save()
            form.save_m2m()
            return HttpResponseRedirect('/')

    else:
       form = ArticleForm()

    return render(request, 'template.html', {'form': form'})

但是,我會考慮在Django中使用基於類的視圖。 最初,它們看起來似乎很混亂,但是隨着時間的流逝,您將學會欣賞它們。 文件 學習CBV時的另一個有用資源

通過使用CBV,以上內容可以簡化為:

class AddArticleView(CreateView):
    success_url = 'name_of_view_here'
    form_class = ArticleForm
    template_name = 'template.html'

# urls.py
urlpatterns = patterns('', url(r'^articles/add/$', AddArticleView.as_view()))

模板

除了每個字段錯誤之外,您還需要在模板中包括總體表單錯誤:

<form class="form" action="{% url "article.views.AddArticle" %}" method="post" enctype='multipart/form-data'>
    {% csrf_token %}
    {{ form.non_field_errors }}
    ...
</form>

請注意,您可能需要使用一些引導標記來包裝錯誤。 文檔中的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM