我正在尝试将Django与PostgreSQL连接起来,到目前为止一切都很顺利,我为女性客户创建了一个模型
from django.db import models
from django.db.models import CheckConstraint, Q
class fml_tbl(models.Model):
fml_id = models.CharField(primary_key = True, max_length = 10)
first_name = models.CharField(max_length = 20, null = False)
last_name = models.CharField(max_length = 20)
age = models.PositiveIntegerField(unique = True)
qualification = models.CharField(max_length = 50)
profession = models.CharField(max_length = 50)
officer = models.ForeignKey("officer", on_delete=models.CASCADE, null = False)
class Meta:
constraints = [
models.CheckConstraint(check=Q(age__gte=18), name='age_gte_18')
]
我添加了一个检查约束,用于检查客户端的年龄,当我迁移时,我得到错误...
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
?: (models.E032) constraint name 'age_gte_18' is not unique amongst models: client.fml_tbl, client.ml_tbl.
System check identified 1 issue (0 silenced).
还有一个男性客户表和这个一样,我只是想练习django模型的约束,因为postgresql也使用约束,但我不明白在这里该怎么做。我使用Django 3.0和Python 3.7
我在stackoverflow和其他地方搜索了不同的答案,但我找不到任何东西,我使用django documentation和this site来理解约束,但到目前为止,这是文档中关于我的错误的所有内容,this是我在CheckConstraints上找到的唯一SO答案,但这并不能解决我的问题。
请帮助我,并解释它尽可能简单,因为我是一个新手。我真的很感激你的帮助!
2条答案
按热度按时间6ie5vjzr1#
您试图使用相同的
name
、age_gte_18
定义两个不同的索引。系统检查告诉你不要这样做。Django文档中似乎没有讨论这个限制,但可能是一个或多个支持的数据库的限制(例如,参见this answer)。解决方案很简单-为每个索引指定一个唯一的
name
(或者干脆不指定名称)。zfycwa2u2#
你可以通过Django设置
SILENCED_SYSTEM_CHECKS = ["models.E032"]
忽略系统检查下面是
SILENCED_SYSTEM_CHECKS
设置的参考。只有在你知道自己在做什么的情况下才忽略系统检查。例如,当我将Django连接到一个现有的MySQL数据库时,我需要忽略这个检查,该数据库在使用相同名称的不同表上有多个索引。在我使用的MySQL版本中,这不是一个问题,而在其他数据库后端中则是。