class Seller(object):
type = ...
name = ...
cars = models.ManyToManyField(Car)
class PotentialBuyer(object):
name = ...
cars = models.ManyToManyField(Car)
class Car(object):
extra_field = ...
extra_field2 = ...
假设我有这样的关系。我想使用extra queryset修饰符来获取当我获取卖家对象时潜在买家已经挑选出的汽车列表。我想查询查询集会是这样的。
def markPending(self)
return self.extra(select={'pending': 'select images from PotentialBuyer as t ...'})
我怎样才能做到这一点?有没有更好的办法?我可以获取卖家对象和潜在对象并做套装,但我认为让它由数据库处理会更清晰。我正在使用PostgreSQL 9.5。
答案 0 :(得分:0)
我认为Exists
子查询表达式会做你想要的。或者至少它会让你开始走正确的道路。 Docs或者您可能希望使用aggregate to count个数字。
编辑:如果您需要选择完整对象而不是计数,存在或单个实体,请使用Prefetch
中的prefetch_related
实例。 https://docs.djangoproject.com/en/2.0/ref/models/querysets/#django.db.models.Prefetch
答案 1 :(得分:0)
不完全是答案,但这是我最终得到的解决方案,我对表现感到满意。也许有人可以稍后回答这个问题:
from api.models import PotentialBuyer
potentials = PotentialBuyer.objects.filter(owner=user_id, default=True).first().cars.all()
Car.objects.filter(....).annotate(pending=Case(When(id__in=potentials, then=Value(True)), default=Value(False), output_field=BooleanField()))