我正在试着用新的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获取一个查询集,但它还应该包含一个预取的属性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可以做到这一点吗?我不知道如何使用这些参数。
发布于 2015-02-26 06:05:38
您不需要使用预取。只有当默认的prefetch_related不能做你想要的事情时,你才需要使用预取。
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))https://stackoverflow.com/questions/28730106
复制相似问题