0

以下のモデルとビューを考えると、特定のクラブについて、そのクラブの利用可能なコート (「court」) と利用可能な時間 (「avail_time」) をテンプレートに表示しようとしています。これを行うのに問題があります。

モデル:

from django.db import models

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

class Taken(models.Model):
    club = models.ForeignKey(Club)
    court = models.ForeignKey(Available)
    taken_time = models.DateTimeField('taken time')
    userid = models.EmailField(max_length = 75)

意見:

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

テンプレート:

{% for court in club.court_set.all %}
{{court.court }}
{% endfor %}
4

2 に答える 2

1

ええと、あなたは裁判所のモデルを持っていないようです。なぜあなたが を呼び出そうとしているのかわからないのですがcourt_set.all。そのクラブの利用可能なインスタンスのリストを表示するために使用できますclub.available_set.all。これは、あなたが意味するものかもしれません。

于 2012-05-17T14:02:26.217 に答える
0

最初のステップは、モデルを適切に設定することです。クラブにはコートがあり、コートには利用可能な時間があります。クラブには利用可能な時間がありません。これが現在の設定方法です。さらに、「撮影済み」は利用可能な時間のステータスです。モデルそのものであってはなりません。次のようなものを試してください:

class Club(models.Model):
    establishment = models.CharField(max_length=200)
    address = models.CharField(max_length=200)

    def __unicode__(self):
        return self.establishment

class Court(models.Model):
    club = models.ForeignKey(Club, related_name='courts')
    name = models.CharField(max_length=200)

class CourtTime(models.Model):
    AVAILABLE = 0
    TAKEN = 1
    STATUS_CHOICES = (
        (AVAILABLE, 'Available'),
        (TAKEN, 'Taken'),
    )

    court = models.ForeignKey(Club, related_name='times')
    time = models.DateTimeField('available time')
    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=STATUS_CHOICES[AVAILABLE])

    def __unicode__(self):
        return self.court

次に、カスタムマネージャを使用しCourtTimeて、使用可能な/取得したクエリセットを返すことをお勧めします。

class CourtTimeQuerySet(models.query.QuerySet):
    def available(self):
        return self.filter(status=CourtTime.STATUS_CHOICES[CourtTime.AVAILABLE])

    def taken(self):
        return self.filter(status=CourtTime.STATUS_CHOICES[CourtTime.TAKEN])

class CourtTimeManager(models.Manager):
    use_for_related_fields = True

    def get_query_set(self, *args, **kwargs):
        return CourtTimeQuerySet(self.model)

    def available(self, *args, **kwargs):
        return self.get_query_set().available(*args, **kwargs)

    def taken(self, *args, **kwargs):
        return self.get_query_set().taken(*args, **kwargs)

次に、それをモデルに追加します。

class CourtTime(models.Model):
    ...
    objects = CourtTimeManager()

これらすべてが整ったら、テンプレートで次のことを実行できます。

{% for court in club.courts.all %}
    <h2>{{ court.name }}</h2>
    <ul>
        {% for time in court.times.available %}
        <li>{{ time|date:"m/d/Y g:i A" }}</li>
        {% endfor %}
    </ul>
{% endfor %}
于 2012-05-17T14:52:08.400 に答える