You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中为唯一字段设置并显示自定义错误提示

解决Django表单重复标题无错误提示的问题

你的代码存在三处关键问题导致错误提示无法显示,以下是具体修正方案:

1. 修正表单错误消息配置(forms.py)

你当前的错误消息配置针对的是unique_together(联合唯一约束),但title是单个字段的unique约束,需要调整为字段级别的错误配置:

from django import forms
from django.forms import ModelForm
from .models import Document

class DocumentForm(ModelForm):
    class Meta:
        model = Document
        fields = ['title',]  # 用列表代替集合,更符合Django规范
        labels = {'title': '',}
        widgets = {'title': forms.TextInput(attrs={'placeholder': 'document_title'}),}
        # 针对title字段的unique错误配置提示
        error_messages = {
            'title': {
                'unique': '该标题已存在,请更换其他标题。',
            }
        }

2. 修正视图逻辑(views.py)

当POST请求表单验证失败时,你没有将带有错误信息的表单实例传递给模板,而是重新赋值了空表单类,导致错误丢失:

def home(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST)
        if form.is_valid():
            document = form.save()
            dummy_note = Note.objects.create(document=document)
            return HttpResponseRedirect('/note')
        # 验证失败时,form已包含错误信息,直接向下传递即可
    else:
        # GET请求时创建空表单实例
        form = DocumentForm()
    
    documents = Document.objects.all()
    return render(request, 'note/home.html', {'form': form, 'documents': documents})

3. 可选:自定义错误提示样式(home.html)

默认的{{form.as_p}}会自动将错误信息渲染在字段下方,若需要更美观的样式,可以手动渲染字段和错误:

<form method=POST>
  {% csrf_token %}
  <div class="form-group">
    {{ form.title }}
    {% if form.title.errors %}
      <div class="text-danger mt-1">
        {% for error in form.title.errors %}
          <small>{{ error }}</small>
        {% endfor %}
      </div>
    {% endif %}
  </div>
  <button name="create_document" type="submit" class="btn btn-primary">Create</button>
</form>

修改完成后,提交重复标题时,错误提示会显示在输入框下方,样式符合Bootstrap警告风格。

内容的提问来源于stack exchange,提问作者Berk Efe Keskin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:07:04