web-dev-qa-db-ja.com

Django-単一のクエリで外部キーオブジェクトを取得しますか?

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')
16
Stuart Axon

Programmeをクエリしてprogrammeに割り当てますが、結果をどこでも使用することはありません。その行を削除してください。

私はあなたがそのようなものを探していると思います:

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

select_relatedであり、最終的なgetの前に配置します。それはあなたの行です:

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

のように見えるはずです

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

残念ながら、ここで強調します: 単一のクエリで外部キーオブジェクトを取得する-Django select_relatedは、ForeignKeysを持つオブジェクトでのみ機能し、その逆は機能しないため、アクターを取得できます。

19