我试图用新的Prefetch
来解决一个问题,但我不知道如何使用它。
我有这些模型:
class Desk(django.db.models.Model):
pass
class Chair(django.db.models.Model):
desk = django.db.models.Foreignkey('Desk', related_name='chair',)
nearby_desks = django.db.models.ManyToManyField(
'Desk',
blank=True,
)
我想为
Desk
获取一个queryset,但它还应该包含一个预取属性favorite_or_nearby_chairs
,其值应该等于:Chair.objects.filter(
(django.db.models.Q(nearby_desks=desk) | django.db.models.Q(desk=desk)),
some_other_lookup=whatever,
)
这在
Prefetch
中可能吗?我不知道如何使用这些论点。 最佳答案
不需要使用预取。如果默认的预取相关操作无法完成所需操作,则只需使用预取。
Chair.objects.select_related('desk').prefetch_related('nearby_desks')\
.filter(Q(nearby_desks=desk) | Q(desk=desk))
更新
使用预取:
nearby_desks_qs = Desk.objects.all()
Chair.objects.select_related('desk')\
.prefetch_related(Prefetch('nearby_desks',
queryset=nearby_desks_qs,
to_attr='nearby_desks_qs'))\
.filter(Q(nearby_desks=desk) | Q(desk=desk))