【问题标题】:Django. Chain select_related()姜戈。链 select_related()
【发布时间】:2016-01-06 10:33:44
【问题描述】:

这是一个简单的问题:

这有意义吗,或者是否可以在这样的查询上链接select_related?:

queryset = a.objects.filter(...).select_related("b").select_related("c")

A 有一个到 B 的外键,B 有一个到 C 的外键。我的模型如下所示:

class A(models.Model):
 b = models.ForeignKey(B)

class B(models.Model):
 c = models.ForeignKey(C)

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    试试这个:

    queryset = a.objects.filter(...).select_related("b__c")
    

    See the docs

    from django.db import models
    
    class City(models.Model):
        # ...
        pass
    
    class Person(models.Model):
        # ...
        hometown = models.ForeignKey(City)
    
    class Book(models.Model):
        # ...
        author = models.ForeignKey(Person)
    

    和查询:

    b = Book.objects.select_related('author__hometown').get(id=4)
    p = b.author         # Doesn't hit the database.
    c = p.hometown       # Doesn't hit the database.
    

    【讨论】:

    • 您实际上不需要在此处进行任何链接。 select_related('b__c') 必然暗示 select_related('b') 已经。
    猜你喜欢
    • 2020-08-17
    • 2011-01-27
    • 2014-06-02
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多