0

私は次のモデルを持っています:

from django.db import models
import datetime

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

class Day(models.Model):
    club = models.ForeignKey(Club)
    day = models.DateField('day')
    def __unicode__(self):
        return unicode(self.day)

class Court(models.Model):
    club = models.ForeignKey(Club)
    day = models.ForeignKey(Day)
    court = models.IntegerField(max_length=200)
    def __unicode__(self):
        return unicode(self.court)

class Slot(models.Model):
    club = models.ForeignKey(Club)
    day = models.ForeignKey(Day)
    court = models.ForeignKey(Court)
    slot = models.TimeField('slot')
    reservation = models.CharField(max_length=200)
    def __unicode__(self):
        return unicode(self.slot)

スロット モデルでは、各「スロット」は「予約」フィールドに「オープン」または他の値 (通常は電子メール) を持つことができます。私がやろうとしていること: 関数に渡された club_id を指定して、予約値が "open" で "day" が今日に等しい "slot" のすべてのフィールドを表示し、これを渡します。テンプレートに。

def avail_times(request, club_id):
    p = get_object_or_404(Slot,pk=club_id)
    return render_to_response('reserve/templates/avail_times.html', {'times':p})

私が持っている現在のビュー/テンプレートではそれを行うことができません。時間を返すだけです。ビュー内で「日」と「クラブ」を参照し (club_id を指定)、テンプレートに上記を表示するにはどうすればよいですか?

4

2 に答える 2

0

まず、そのクエリは、あなたが望んでいるとは言えません。特定のクラブの今日の空きスロットをすべて取得するには、次のようなものが必要です。

open_slots = Slot.objects.filter(club_id=club_id, day__day=datetime.date.today(),
                                 reservation='open')

これで、テンプレートで を反復処理してopen_slots、それぞれの時間を表示slotできます (ここではより適切なフィールド名を選択する必要があります)。

ところで、私はDayモデルの要点が理解できませんし、少なくともなぜあなたがコートからデイまで FK を得たのか理解できません。コートはどんな日でも同じで、Day に関係するのはスロットだけです。同様に、Day は Club への FK を必要としません (どのクラブにいても月曜日です)。実際、Day モデルを完全に削除して、Slot で直接 DateField を使用することができます。

于 2012-05-21T13:58:00.790 に答える
0

関連するオブジェクト (別名:foreignKeys) を取得するには、select_related()を使用する必要があります。

ビューで参照するには、次のように入力します。

club = p.club

これにより、関連するクラブ オブジェクトが得られます (select related を使用しない場合は、db に別のヒットがあります)。

これらすべての情報は、Slot オブジェクト (p) に格納されており、その唯一の「実際の」メンバーはスロット フィールドです (ご指摘のとおり、表示されている日時フィールド)。

于 2012-05-21T13:27:31.330 に答える