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)

在 Slot 模型中,每个“slot”可以是“open”,也可以在“reservation”字段中具有任何其他值(通常是电子邮件)。我正在尝试做的事情:给定一个传递给函数的 club_id,显示“slot”中具有“open”保留值和等于今天的“day”的所有字段......然后通过这个进入模板。

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})

我无法使用我拥有的当前视图/模板来做到这一点;它只返回一个时间。如何在视图中引用“day”和“club”(给定 club_id),然后在模板中显示以上内容?

4

2 回答 2

0

您应该使用select_related()来检索相关对象(又名:foreignKeys)

要在您的视图中引用它,只需键入:

club = p.club

这将为您提供相关的俱乐部对象(如果您不使用选择相关,则在数据库中再次点击)

您已经将所有这些信息存储在 Slot 对象 (p) 中,其唯一的“真实”成员是 slot 字段(正如您所指出的,您看到的 datetime 字段)

于 2012-05-21T13:27:31.330 回答
0

首先,该查询不会按照您所说的去做。要获得给定俱乐部今天的所有空缺席位,您需要这样的东西:

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

现在在您的模板中,您可以遍历open_slots,并为每个显示slot时间(您应该在此处选择更好的字段名称)。

顺便说一句,我不明白这个Day模型的意义,或者至少为什么你有一个从法庭到一天的 FK。无论哪一天,球场都是一样的,唯一应该与 Day 相关的是 Slot。同样,Day 不需要 FK 到俱乐部(无论您在哪个俱乐部,它仍然是星期一)。事实上,您可以完全删除 Day 模型,直接在 Slot 上使用 DateField。

于 2012-05-21T13:58:00.790 回答