什么是最有效的视图和模板?

时间:2012-05-21 13:19:48

标签: django templates view model

我有以下型号:

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”可以在“预订”字段中“打开”或具有任何其他值(通常是电子邮件)。我要做的是:给一个传递给函数的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),然后在模板中显示以上内容?

2 个答案:

答案 0 :(得分:0)

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

要在视图中引用它,只需输入:

club = p.club

这将为您提供相关的俱乐部对象(如果您不使用选择相关的数据库中的另一个命中)

您已经拥有存储在Slot对象(p)中的所有信息,其唯一的“真实”成员是插槽字段(正如您所指出的,您正在看到的日期时间字段)

答案 1 :(得分: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。