【问题标题】:DJANGO CHECK CONSTRAINTS: SystemCheckError: (models.E032) constraint name 'age_gte_18' is not unique amongst modelsDJANGO CHECK CONSTRAINTS:SystemCheckError:(models.E032)约束名称'age_gte_18'在模型中不是唯一的
【发布时间】:2020-04-18 03:26:22
【问题描述】:

我正在尝试将 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 上找到的唯一 SO 答案,但这并不能解决我的问题。

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

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

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

    解决方案很简单——给每个索引一个唯一的name(或者干脆不提名字)。

    【讨论】:

      【解决方案2】:

      您可以使用 Django 设置 SILENCED_SYSTEM_CHECKS = ["models.E030"] 忽略系统检查

      Here is the reference for the SILENCED_SYSTEM_CHECKS setting.

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 2019-09-25
        • 2019-06-01
        • 2016-04-12
        相关资源
        最近更新 更多