繁体   English   中英

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

[英]DJANGO CHECK CONSTRAINTS: SystemCheckError: (models.E032) constraint name 'age_gte_18' is not unique amongst models

我正在尝试将 Django 与 PostgreSQL 连接起来,到目前为止一切顺利,我为女性客户创建了一个 model

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 model 约束,因为 postgresql 也使用约束,但我不明白在这里做什么。 我正在使用 Django 3.0 和 Python 3.7

我在 stackoverflow 和其他地方搜索了不同的答案,但我找不到任何东西,我使用了django 文档这个网站来理解约束,但到目前为止,就是文档所说的关于我的错误的全部内容, 是唯一的答案我在 CheckConstraints 上找到,但这并不能解决我的问题。

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

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

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

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

这是SILENCED_SYSTEM_CHECKS设置的参考。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM