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

使用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>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值