Django 连接具有两个或多个 FK 条件的表

问题描述 投票:0回答:1

我想用两个条件连接模型 B 和 C,model_B 中的 data_a 和 human,model_C 中的 data_a 和 autor,但是如何使用 Django ORM 来实现呢

class user(models.Model):
    data_1 = models.CharField(max_length=60)
    data_2 = models.SmallIntegerField()
    data_3 = models.IntegerField(blank=True, null=True)

class model_A(models.Model):
    data_1 = models.CharField(max_length=60)
    data_2 = models.SmallIntegerField()
    data_3 = models.IntegerField(blank=True, null=True)



class model_B(models.Model):
    data_a = models.ForeignKey(model_A)
    human = models.ForeignKey(user)
    data_2 = models.IntegerField()

class model_C(models.Model):
    data_a = models.ForeignKey(model_A)
    author = models.ForeignKey(user)
    data_1 = models.CharField(max_length=5)
    data_2 = models.IntegerField()

加入django的附加条件

我见过这个地方,但不知道是否适用于我的情况

django orm
1个回答
0
投票

你可以试试这个

from django.db.models import F

result = model_B.objects.filter(
human__model_c__author=F('human'), 
data_a__model_c__data_a=F('data_a')
).values('data_a')

在此代码中,我们使用双下划线符号来遍历模型之间的关系并执行连接。 human__model_c__author 和 data_a__model_c__data_a 表示您在 SQL 查询中提到的条件,我们在其中检查 human_id 和author_id 之间以及 data_a_id 和 data_a_id 之间是否相等。最后,我们使用values方法从model_B中选择'data_a'字段。

此代码将生成一个与您的 SQL 查询等效的查询。

© www.soinside.com 2019 - 2024. All rights reserved.