代码之家  ›  专栏  ›  技术社区  ›  demux

仅django预取相关id

  •  28
  • demux  · 技术社区  · 11 年前

    我试图优化我的查询,但prefetc_related坚持连接表并选择所有字段,尽管我只需要关系表中的id列表。

    queries

    您可以忽略第4个查询。这与问题无关。

    相关代码:

    class Contact(models.Model):
        ...
        Groups = models.ManyToManyField(ContactGroup, related_name='contacts')
        ...
    
    queryset = Contact.objects.all().prefetch_related('Groups')
    
    1 回复  |  直到 10 年前
        1
  •  45
  •   johnthagen Matthew Scharley    2 年前

    Django 1.7已添加 Prefetch objects 它允许您自定义预取时使用的查询集。

    特别是,请参见 only() .

    在这种情况下,您可能想要以下内容:

    queryset = Contact.objects.all().prefetch_related(
        Prefetch('Groups', queryset=Group.objects.all().only('id')))