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

时间:2010-03-02 23:34:24

标签: 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')

2 个答案:

答案 0 :(得分:14)

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

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

是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 - Django你只能以这种方式检索actor,因为select_related仅适用于具有ForeignKeys的对象,反之亦然。

答案 1 :(得分:9)

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