您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django多列外键

5b51 2022/1/14 8:23:09 python 字数 3746 阅读 596 来源 www.jb51.cc/python

是否可以在另一个模型中定义引用多列的外键? 例如,一个外键引用product表中的两列索引和SQL语句: FOREIGN KEY (product_category, product_id) REFERENCES product(category, id) 顺便说一下,我已经研究过django.contrib.contenttypes,并不认为这是这种场景的完美解决方案. 它尚不支持.如果你愿意,

概述

例如,一个外键引用product表中的两列索引和@R_419_2524@语句:

FOREIGN KEY (product_category,product_id) REFERENCES product(category,id)

顺便说一下,我已经研究过django.contrib.contenttypes,并不认为这是这种场景的完美解决方案.

多列主键支持

关系数据库设计使用一组列作为表的主键.当此集包含多个列时,它被称为“复合”或“复合”主键. (有关术语的更多信息,请参阅讨论数据库密钥的文章).
目前,Django模型仅支持此集合中的单个列,从而拒绝许多设计,其中表的自然主键是多列. Django目前无法使用这些模式;它们必须引入冗余的单列密钥(“代理”密钥),迫使应用程序在任何给定实例中对表使用哪个密钥进行任意和其他不必要的选择.
本页讨论如何让Django支持这些复合主键.这里有很多细节,但是做得恰到好处,它将为数据建模提供更多的灵活性和潜在的简单性.

当前状态

当前状态是接受/分配和处理该问题,并且在http://github.com/dcramer/django-compositepks上有部分实现.该实现允许具有复合主键.但是,ForeignKey和RelatedManager中缺少对复合键的支持.因此,无法从具有复合主键的模型导航关系.

讨论:

David Cramer’s initial patch

The composite foreign key API design

Ticket

注 – SqlAlchemy允许如下所述,你可以使用@R_419_2524@Alchemy替换Django的ORM

也可以使用ForeignKeyConstraint对象在表级别定义外键.该对象可以描述单列或多列外键.多列外键称为复合外键,并且几乎总是引用具有复合主键的表.下面我们定义一个具有复合主键的表发票:

invoice = Table('invoice',Metadata,Column('invoice_id',Integer,primary_key=True),Column('ref_num',Column('description',String(60),nullable=False)
)

然后是一个表invoice_item,其中包含一个引用发票的复合外键:

invoice_item = Table('invoice_item',Column('item_id',Column('item_name',nullable=False),ForeignKeyConstraint(['invoice_id','ref_num'],['invoice.invoice_id','invoice.ref_num'])
)

Reference

总结

以上是编程之家为你收集整理的Django多列外键全部内容,希望文章能够帮你解决Django多列外键所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶