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