Django join tables with two or more FK conditions(带有两个或多个FK条件的Django连接表)

rjjhvcjd  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(146)

我想用两个条件连接模型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()

字符串
additional conditions on join in django
我看过这个地方,但我不知道它是否适合我的情况

5vf7fwbs

5vf7fwbs1#

你可以试试这个

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查询等价的查询。

相关问题