我有以下型号:
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),然后在模板中显示以上内容?
答案 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。