【问题标题】:Can two Django Objects have multiple intermediate models between them?两个 Django 对象之间可以有多个中间模型吗?
【发布时间】:2019-09-26 06:45:12
【问题描述】:

在 Django 中,是否可以通过两个模型之间的多个中间模型创建多个多对多关系?

例如,我有一个对象 user 和一个对象 stock_position,每次用户进行交易时,我都想做一个以 user 和 stock_position 作为外键的中间模型(交易)。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    你的意思是这样的?

    class Transactions(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE)
        stock_position = models.ForeignKey(StockPosition,
                         on_delete=models.CASCADE)
        share = models.IntegerField()
    
        class Meta:
            unique_together = (('user', 'stock_position', 'share'),)
    

    如果您使用此唯一索引,您可以根据需要插入任意数量的用户/库存位置重复项,只要 share 列每次都不同。否则将引发IntegrityError(您通常/总是在您的代码中有例外)

    【讨论】:

    • 所以是的,事务模型看起来就像你描述的那样,但是你能用相同的外键创建几个这样的事务吗? user = User() stock_position = StockPosition() transaction1 = Transaction(user=user, position=stock_position, share=5) transaction2 = Transaction(user=user, position=stock_position, share=7) transaction1.save() transaction2.save ()
    • @JeffreyHe 是的,应该可以。 ForeignKeys 仅在父表(在本例中为 StockPosition 表)上是唯一的。如果您打算走这条路线,我建议您设置某种唯一索引,以避免重复数据。
    • 我不确定您的用例,但我在回答中添加了一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2010-10-22
    • 2018-05-03
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多