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')
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を持つオブジェクトでのみ機能し、その逆は機能しないため、アクターを取得できます。