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

Django/Pythons is Messages - Unique Error displays the field

我是 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 %}

根据 documentation,Django 强制主键的唯一性,因此该字段在整个 table.

中必须是唯一的

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

如果您尝试添加重复的 FirstName,您将无法添加,这就是您收到该错误的原因。

默认情况下Django会添加一个AutoField来保存主键,所以你不需要设置primary_key=True。将 FirstName 设为 primary_key.

实际上是不好的做法

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

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

您可以捕获因添加重复行而抛出的异常,也可以使用自定义消息引发您自己的异常。

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 中使用下面的代码会生成 Person with this FirstName already exists.(这就是我正在寻找的对于)

{% 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 %}