Django/Pythons是消息唯一错误显示字段

2024-04-25 01:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Django/Python编程非常陌生,希望这是一个简单的修复

我创建了一个模型,当我尝试添加重复记录(通过ModelForm)时,返回到模板的消息会在消息中显示两次唯一字段。 它看起来像:“fieldname”“classname”和此“fieldname”已经存在

如何显示字段名一次

当前显示的消息是: 名已存在具有此名的人员

我想看到的是:这个名字的人已经存在了

如蒙协助,将不胜感激。谢谢

Models.py:

class Person(models.Model):
    FirstName = models.CharField(max_length=20, primary_key=True)

Template.html

{% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
        message: {{ message | striptags }}
    </div>
{% endfor %}

Tags: django模型div模板消息messagemodels编程
3条回答

您可以捕获为添加重复行而引发的异常,并且可以使用自定义消息引发自己的异常

from django.db import IntegrityError

except IntegrityError as e: 
    if 'unique constraint' in e.message: # or e.args[0] from Django 1.10
        #do something, create exception with your own message.

我通过在模板中使用form.errors而不是Django消息来解决这个问题

在Template.html中使用下面的代码生成的这个名字的人已经存在(这就是我要找的)

{% if form.errors %}
    {% for key, value in form.errors.items %} 
        <div class="row testrow">
            <div class="alert alert-error col-lg-12">
                {{ value | striptags }}
            </div>
        </div>
    {% endfor %}
{% endif %}

根据documentation,Django强制主键的唯一性,因此字段在整个表中必须是唯一的

primary_key=True implies null=False and unique=True. Only one primary key is allowed on an object.

如果你试图添加一个重复的名字,你将无法,这就是为什么你会得到这个错误

默认情况下,Django添加一个AutoField来保存主键,因此不需要将primary_key=True。将名字作为主键实际上是一种不好的做法

因此,由于您仍然希望继续操作并更改错误消息,您可以将模型更改为

class Person(models.Model):
    FirstName = models.CharField(max_length=20, primary_key=True, error_messages={'unique':"Person with this FirstName already exists."})

相关问题 更多 >