当前位置:   article > 正文

Django提交表单出错&提示错误

Django提交表单出错&提示错误

使用ArticleColumnForm表单,向数据库提交内容,内容包括column。如果同一用户提交的column重复,则提示表单出错,表单提交失败后,重新渲染表单提交html页面,其中提示错误信息。

涉及的代码包括:

1、forms.py

添加__init__方法,初始化表单时,包含提交表单的用户信息。

添加clean_column方法,检查column是否重复

  1. from django import forms
  2. from .models import ArticleColumn
  3. class ArticleColumnForm(forms.ModelForm):
  4. def __init__(self, *args, **kwargs):
  5. user = kwargs.pop('user', None)
  6. super(ArticleColumnForm, self).__init__(*args, **kwargs)
  7. self.user = user
  8. class Meta:
  9. model = ArticleColumn
  10. fields = ('column',)
  11. def clean_column(self):
  12. column = self.cleaned_data.get('column')
  13. user = self.user # 获取传递的用户信息
  14. if ArticleColumn.objects.filter(user=user, column=column).exists():
  15. raise forms.ValidationError('You have already created a column with this name.')
  16. return column

2、views.py

只有在form的valid检查通过后,才进行页面的重定向,否则重新渲染add_column.html页面。渲染是使用的form不是空表,而是刚才提交的,包含错误信息的form。

  1. @login_required
  2. def add_column(request):
  3. if request.method == 'POST':
  4. # 获取表单
  5. article_column_form = ArticleColumnForm(data=request.POST, user=request.user)#初始化表单时,包含用户信息
  6. if article_column_form.is_valid():
  7. new_articlecolumn = article_column_form.save(commit=False) # 创建数据库对象,commit=False,不提交
  8. new_articlecolumn.user = request.user
  9. # 将数据库对象写入
  10. new_articlecolumn.save()
  11. return HttpResponseRedirect('/article/article-column') # 写完数据后,重定向到数据显示页面
  12. else:
  13. article_column_form = ArticleColumnForm()
  14. context = {'article_column_form':article_column_form}
  15. return render(request, 'article/column/add_column.html', context)

3、提交表单的html页面

添加form错误显示区域。

  1. <form class="form-horizontal" action="." method="post">
  2. {% csrf_token %}
  3. <div class="row">
  4. <div class="col-md-4 text-right"><span>栏目名称:</span></div>
  5. <div class="col-md-8 text-left">{{ article_column_form.column }}</div>
  6. </div>
  7. {% if article_column_form.column.errors %}
  8. <div class="errors">
  9. <ul>
  10. {% for error in article_column_form.column.errors %}
  11. <li>{{ error }}</li>
  12. {% endfor %}
  13. </ul>
  14. </div>
  15. {% endif %}
  16. <div class="button-group">
  17. <button type="submit">Submit</button>
  18. <button type="button" onclick="window.location.href='{% url 'article:article_column' %}'">Cancel</button>
  19. </div>
  20. </form>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/588367
推荐阅读
  

闽ICP备14008679号