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 に答える