23

我发现 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')
4

2 回答 2

27

我想你正在寻找select_related().

这一行:

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

应该是这样的:

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

不幸的是,正如这里强调的那样:在单个查询中获取外键对象,您将只能以这种方式检索演员,因为它select_related仅适用于具有外键的对象,反之亦然。

于 2012-07-24T10:30:49.303 回答
13

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

于 2010-03-02T23:42:21.043 回答