【问题标题】:Django - Get Foreign key objects in single query?Django - 在单个查询中获取外键对象?
【发布时间】:2011-01-22 23:45:18
【问题描述】:

我发现 django 外键有点令人困惑,有没有办法使用单个查询来完成下面的视图?

# Model
class Programme(models.Model):
    name = models.CharField(max_length = 64)

class Actor(models.Model):
    programme = models.ForeignKey(Programme)
    name = models.CharField(max_length = 64)


# View
def list_actors( request, programme_id):
    programme = Programme.objects.filter(id = programme_id)[0]
    actors = Actor.objects.filter(programme = programme_id)
    json = simplejson.dumps( [{
        'name': str(actor.name),
        'rating': str(actor.rating),} for actor in actors] )
    return HttpResponse(json, mimetype='application/javascript')

【问题讨论】:

    标签: python django foreign-key-relationship


    【解决方案1】:

    我想你正在寻找select_related()

    这一行:

    actors = Actor.objects.filter(programme = programme_id)
    

    应该是这样的:

    actors = Actor.objects.select_related().filter(programme = programme_id)
    

    不幸的是,正如这里强调的那样:Get foreign key objects in a single query 您只能以这种方式检索演员,因为select_related 仅适用于具有 ForeignKeys 的对象,反之亦然。

    【讨论】:

    • select_related 仅在您想访问 actor.programme.name 而不需要每个参与者额外的 DB 命中时才需要。否则就是多余的。
    【解决方案2】:

    您查询Programme 并分配给programme,但您从未在任何地方使用结果。只需删除该行。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多