django 通过多个共享外键指定关系

4uqofj5v  于 2023-03-20  发布在  Go
关注(0)|答案(1)|浏览(162)

假设我们有4个模型,分别命名为AlphaBetaGammaDelta,前两个模型如下所示:

class Alpha(models.Model):
    gamma = models.ForeignKey(Gamma, on_delete=models.RESTRICT)
    delta = models.ForeignKey(Delta, on_delete=models.RESTRICT)
    text = models.CharField(max_length=1024)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['gamma_id', 'delta_id'])
        ]

class Beta(models.Model):
    gamma = models.ForeignKey(Gamma, on_delete=models.RESTRICT)
    delta = models.ForeignKey(Delta, on_delete=models.RESTRICT)
    value = models.IntegerField()

正如您所看到的,这两个外键可以用来将Beta中任意数量的行与Alpha中的一行关联起来,Beta和Alpha之间基本上是一对多的关系。
由于各种原因,将Beta中的两个外键替换为Alpha的外键是不可行的。
是否有一种方法可以在Alpha上定义一个关系,返回Beta中具有相同gamma_iddelta_id的所有行

66bbxpm5

66bbxpm51#

对于名为some_alphaAlpha模型,您可以使用以下命令检索Beta项目:

Beta.objects.filter(gamma__alpha=some_alpha, delta__alpha=some_alpha)

因此,我们将检查跨越gammadelta的关系是否引用同一个alpha对象。

相关问题