我想用两个条件连接模型 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()
我见过这个地方,但不知道是否适用于我的情况
你可以试试这个
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 查询等效的查询。