DJANGO检查约束:SystemCheckError:(models.E032)约束名称“ age_gte_18”在各个模型中不是唯一的

时间:2020-04-18 03:26:22

标签: python django postgresql

我正在尝试将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 documentationthis site来理解约束,但到目前为止this都是文档说明了我的错误,this是我在CheckConstraints上找到的唯一答案,但这不能解决我的问题。

请帮助我,并尽可能简单地解释一下,因为我是新手。我将非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您正在尝试使用相同的nameage_gte_18定义两个不同的索引。系统检查告诉您不要这样做。 Django文档中似乎没有讨论该限制,但是大概是一个或多个受支持的数据库的限制(例如,请参见this answer)。

解决方案很简单-为每个索引赋予唯一的name(或简单地省略名称)。

答案 1 :(得分:0)

您可以使用 Django 设置 SILENCED_SYSTEM_CHECKS = ["models.E030"]

忽略系统检查

Here is the reference for the SILENCED_SYSTEM_CHECKS setting.

仅当您知道自己在做什么时才忽略系统检查。例如,在将 Django 连接到现有 MySQL 数据库时,我需要忽略此检查,该数据库在不同表上使用相同名称的多个索引。在我使用的 MySQL 版本中,这不是问题,而在其他数据库后端则是。

相关问题