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

时间:2020-04-25 11:38:34

标签: python django message

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

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

如何一次显示字段名称。

当前显示的消息是: 具有该名字的 FirstNamePerson已经存在。

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

任何帮助将不胜感激。谢谢

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

3 个答案:

答案 0 :(得分:1)

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

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.

答案 1 :(得分:0)

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

primary_key = True 表示 null = False unique = True 。只有一个小学 键可以用于对象。

如果您尝试添加重复的名字,则将无法执行,这就是为什么出现此错误。

默认情况下,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."})

答案 2 :(得分:0)

我设法通过在模板中使用form.errors而不是Django消息来解决此问题。

在Template.html中使用以下代码将产生 具有此名字的人。 (这是我要寻找的)

actions = [
    self.generate_action(
        n=n,
        cumulative_payoffs=(cumulative_payoffs := cumulative_payoffs + payoff)
    )
    for payoff in payoffs.T
]