小编And*_*ian的帖子

Django MSSQL:覆盖外键约束名称生成

我正在尝试使用 django-mssql-backend 在 Django 3.0 中创建一个数据库模型,作为 SQL Server 2019 的数据库后端。该数据库对其中包含的表使用多个架构,其中一些表是非托管的(已经存在) ,以及通过迁移从头开始创建的其他内容。为了使多个模式正常工作,我使用了在此处的另一个答案中找到的技巧,建议按如下方式格式化表名:

class MyModel(models.Model):
    ...

    class Meta:
        db_table = 'schema].[table'
Run Code Online (Sandbox Code Playgroud)

这样 SQL 就可以编译为在外部自动形成的方括号中完成架构/表定义。这样做的问题是,ForeignKey 对象使用此表名称生成其约束名称,这会导致出现无效的约束名称,从而导致在创建表完成后迁移失败,并且需要创建约束。\

它们生成如下:
[schema1].[table1_colname_id_bc165567_fk2_schema2].[table_colname]

有没有办法覆盖这种行为?如果可以通过分叉后端并添加手动编译代码来覆盖这一点,我将如何去做呢?否则,如何在使用多个模式并充分利用 Django 附带的 ORM/迁移的同时在模型中拥有外键?

python sql-server django python-3.9 django-mssql-backend

5
推荐指数
1
解决办法
578
查看次数