赞
踩
使用ArticleColumnForm表单,向数据库提交内容,内容包括column。如果同一用户提交的column重复,则提示表单出错,表单提交失败后,重新渲染表单提交html页面,其中提示错误信息。
涉及的代码包括:
1、forms.py
添加__init__方法,初始化表单时,包含提交表单的用户信息。
添加clean_column方法,检查column是否重复
- from django import forms
- from .models import ArticleColumn
-
- class ArticleColumnForm(forms.ModelForm):
- def __init__(self, *args, **kwargs):
- user = kwargs.pop('user', None)
- super(ArticleColumnForm, self).__init__(*args, **kwargs)
- self.user = user
-
- class Meta:
- model = ArticleColumn
- fields = ('column',)
-
- def clean_column(self):
- column = self.cleaned_data.get('column')
- user = self.user # 获取传递的用户信息
- if ArticleColumn.objects.filter(user=user, column=column).exists():
- raise forms.ValidationError('You have already created a column with this name.')
- return column
-

2、views.py
只有在form的valid检查通过后,才进行页面的重定向,否则重新渲染add_column.html页面。渲染是使用的form不是空表,而是刚才提交的,包含错误信息的form。
- @login_required
- def add_column(request):
- if request.method == 'POST':
- # 获取表单
- article_column_form = ArticleColumnForm(data=request.POST, user=request.user)#初始化表单时,包含用户信息
- if article_column_form.is_valid():
- new_articlecolumn = article_column_form.save(commit=False) # 创建数据库对象,commit=False,不提交
- new_articlecolumn.user = request.user
- # 将数据库对象写入
- new_articlecolumn.save()
- return HttpResponseRedirect('/article/article-column') # 写完数据后,重定向到数据显示页面
- else:
- article_column_form = ArticleColumnForm()
- context = {'article_column_form':article_column_form}
- return render(request, 'article/column/add_column.html', context)
3、提交表单的html页面
添加form错误显示区域。
- <form class="form-horizontal" action="." method="post">
- {% csrf_token %}
- <div class="row">
- <div class="col-md-4 text-right"><span>栏目名称:</span></div>
- <div class="col-md-8 text-left">{{ article_column_form.column }}</div>
- </div>
- {% if article_column_form.column.errors %}
- <div class="errors">
- <ul>
- {% for error in article_column_form.column.errors %}
- <li>{{ error }}</li>
- {% endfor %}
- </ul>
- </div>
- {% endif %}
- <div class="button-group">
- <button type="submit">Submit</button>
- <button type="button" onclick="window.location.href='{% url 'article:article_column' %}'">Cancel</button>
- </div>
- </form>

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。