首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django 1.7的`Prefetch`

使用Django 1.7的`Prefetch`
EN

Stack Overflow用户
提问于 2015-02-26 05:35:59
回答 1查看 236关注 0票数 3

我正在试着用新的Prefetch解决一个问题,但是我不知道如何使用它。

我有这些模型:

代码语言:javascript
复制
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,它的值应该等于:

代码语言:javascript
复制
Chair.objects.filter(
    (django.db.models.Q(nearby_desks=desk) | django.db.models.Q(desk=desk)),
    some_other_lookup=whatever,
)

使用Prefetch可以做到这一点吗?我不知道如何使用这些参数。

EN

回答 1

Stack Overflow用户

发布于 2015-02-26 06:05:38

您不需要使用预取。只有当默认的prefetch_related不能做你想要的事情时,你才需要使用预取。

代码语言:javascript
复制
Chair.objects.select_related('desk').prefetch_related('nearby_desks')\
        .filter(Q(nearby_desks=desk) | Q(desk=desk))

更新使用预取:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28730106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档