在Django中,在模板中显示数据的最佳方式是什么?
鉴于以下模型和视图,对于任何给定的俱乐部,我试图在模板中显示该俱乐部的可用球场(“球场”)和可用时间(“可用时间”)。我做这件事有困难 型号:在Django中,在模板中显示数据的最佳方式是什么?,django,templates,model,Django,Templates,Model,鉴于以下模型和视图,对于任何给定的俱乐部,我试图在模板中显示该俱乐部的可用球场(“球场”)和可用时间(“可用时间”)。我做这件事有困难 型号: from django.db import models class Club(models.Model): establishment = models.CharField(max_length=200) address = models.CharField(max_length=200) def __unicode__(se
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)
视图:
模板:
{% for court in club.court_set.all %}
{{court.court }}
{% endfor %}
嗯,你似乎没有一个法庭模型,所以我不知道你为什么要调用
Court\u set.all
。您可以使用club.available\u set.all
来显示该俱乐部的可用实例列表,这可能就是您的意思。第一步是适当地设置您的模型。俱乐部有场地,场地有空闲时间。俱乐部没有空闲时间,这就是你现在设置的方式。此外,“take”是可用时间的状态;它本身不应该是一个模型。尝试以下方法:
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 %}
{club.courts.all%}
{{court.name}
{%表示在法庭上的时间。时间。可用%}
- {{时间|日期:“m/d/Y g:i A”}
{%endfor%}
{%endfor%}
{% 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 %}