gpt4 book ai didi

python - Django 左连接?

转载 作者:太空狗 更新时间:2023-10-29 20:20:52 24 4
gpt4 key购买 nike

我有一些模型,大致是这样的:

class ModelA(models.Model):
field = models.CharField(..)

class ModelB(models.Model):
name = models.CharField(.., unique=True)
modela = models.ForeignKey(ModelA, blank=True, related_name='modelbs')

class Meta:
unique_together = ('name','modela')

我想做一个类似这样的查询:“获取所有字段名称等于 X 且具有名称为 X 或根本没有模型名称的 ModelB 模型的 ModelA”

到目前为止我有这个:

ModelA.objects.exclude(field=condition).filter(modelsbs__name=condition)

这将使我获得至少具有一个模型 B 的所有模型 A(实际上它总是只有一个)- 但如果模型 A 没有相关的模型 B,则它不会出现在结果集中。我需要它与 obj.modelb = None 之类的结果集中在一起

我怎样才能做到这一点?

最佳答案

用Q组合两个条件:

from django.db.models import Q
qs = ModelA.objects.exclude(field=condition)
qs = qs.filter(Q(modelbs__name=condition) | Q(modelbs__isnull=True))

检查生成的 SQL 查询:

print qs.query.as_sql()

在类似的查询中,这会生成一个 LEFT OUTER JOIN ... WHERE (a.val = b OR a.id IS NULL)。

关于python - Django 左连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com