12

以下のテンプレートでは、裁判所の名前を取得しようとしています(これは「設立」フィールドで取得されます)。「club_id」をavail_times関数に渡しますが、これからテンプレートに渡される「establishment」フィールドを渡すにはどうすればよいですか?

モデル:

class Club(models.Model):
    establishment = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    def __unicode__(self):
        return self.establishment

class Available(models.Model):
    club = models.ForeignKey(Club)
    court = models.CharField(max_length=200)
    avail_time = models.DateTimeField('available time')
    def __unicode__(self):
        return self.court

関数:

def avail_times(request, club_id):
courts = Available.objects.filter(club__id=club_id)
return render_to_response('reserve/templates/avail_times.html', {'courts': courts})

テンプレート:

    <h1>All available courts for {{ court.club }}</h1>
<ul>
{% for court in courts %}
    <li>{{ court }}</li>
{% endfor %}
</ul>
4

1 に答える 1

24
def avail_times(request, club_id):
  courts = Available.objects.filter(club__id=club_id)      
  if courts.count() > 0:
    club_name = courts[0].club.establishment
  else:
    # no results found for this club id!

# perhaps it is better to check explicity if the club exists before going further, 
# eg. Club.objects.get(pk=club_id)
# is club_id passed in as a string? I haven't used django in awhile somethign 
# worth looking into?

return render_to_response('reserve/templates/avail_times.html', {'courts': courts, 'club_name': club_name})


<h1>All available courts for {{ club_name }}</h1>
<ul>
  {% for court in courts %}
    <li>{{ court.club.establishment }}</li>
  {% endfor %}
</ul>

ドット表記を使用して外部キー関係にまたがります。Clubモデルに到達するには、外部キーを「通過」する必要があります。これは、club属性にアクセスすることで実行されます。したがって、さらに、施設名と住所の両方にアクセスしたい場合は、<li>{{ court.club.address }}</li>住所を表示するために追加することもできます。

ただし、djangoデバッグツールバーを使用して、実行されているクエリの数を確認できることに注意してください。コートがたくさんある場合は、パフォーマンスの低下に気付くかもしれません。覚えておくべきことです。

Courtsはクエリセットオブジェクトです。court.club存在しないプロパティにアクセスしようとしています。これが発生すると、djangoがサイレントに失敗することに気付いたと思います。クラブ名を取得する方法はいくつかあります。

スキーマについて考えてみてください。クラブは複数の裁判所を持つことができますか?.getそうでない場合は、Zahirが提案したように使用する方が「良い」です。複数の法廷を持つことができる場合は、これをより適切に反映するために多対多の関係を調べる必要があります。

于 2012-05-15T13:01:50.797 に答える