我发现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')
答案 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
,但您从不在任何地方使用结果。只需删除该行。