Django - 在单个查询中获取外键对象?

Stu*_*xon 15 python django foreign-key-relationship

我发现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')
Run Code Online (Sandbox Code Playgroud)

小智 17

我想你正在寻找类似的东西:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

哪个是select_related,你在最终获得之前放置.那是你的路线:

actors = Actor.objects.filter(programme = programme_id)
Run Code Online (Sandbox Code Playgroud)

应该是这样的

actors = Actor.objects.select_related().filter(programme = programme_id)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这里强调:在单个查询中获取外键对象 - Django您只能以这种方式检索actor,因为select_related仅适用于具有ForeignKeys的对象,反之亦然.

  • `select_related` 仅在您想访问 `actor.programme.name` 时才需要,而每个角色没有额外的 DB 命中。否则是多余的。 (2认同)

Ign*_*ams 10

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