我试图创建一个结构来显示食品公司的开放时间,并按照" open"状态。但我不知道如何才能获得模板上的信息。例如:
#models.py
class Company(Model):
#... fields ...
def __unicode__(self):
return u'%s'%self.title
我会在这里存储所有时间和日期。
class OpeningHours(Model):
class Meta:
verbose_name = _(u"Horário de Abertura")
verbose_name_plural = _(u"Horários de Abertura")
unique_together = ('company', 'weekday')
company = ForeignKey(Company, related_name="opening_times", verbose_name=_(u"Empresa"))
weekday = IntegerField(choices=WEEKDAYS, verbose_name=_(u"Dia da Semana"))
fromHour = TimeField(verbose_name=_(u"Abre ás:"), null=True, blank=True)
toHour = TimeField(verbose_name=_(u"Fecha ás:"), null=True, blank=True)
def __unicode__(self):
return "%s %s (%s - %s)" % (self.company, self.weekday, self.fromHour, self.toHour)
然后我就像我的观点一样抓住所有公司:
#views.py - This is how I'm processing the views
companies = sorted(Company.objects.filter(category__food=True).order_by('?')[0:4], key=lambda c: c.show_open(), reverse=True)
所以,现在问题出现在模板中,我需要一定要抓住这些信息:
{% for company in companies %}
{% if company.open %}
OPEN
{% else %}
CLOSED
{% endif %}
<!-- I need to know when it's today, when it's tomorrow or when it's another day -->
{% ifequal company.open today %}
Next day will open is today at {{ company.next_time_open }}
{% ifequal company.open another_day %}
Next day will open is Sunday at {{ company.next_time_open }}
{% else %}
Wait, it's open right now from 22h till 00h
{% endif %}
{% endfor %}
答案 0 :(得分:1)
首先,执行.order_by('?')
随机化您的查询集,然后在Python中进行排序。随机排序会导致查询在数据库端占用更多的处理时间,然后在Python中对其进行排序是其自身的额外处理时间。我会考虑使用Django的方法对您的查询集进行排序,而是通过在.order_by()
中指定要排序的字段。
其次,减少数据库命中的一种方法是在查询集上使用.select_related()
。这将在单个SQL语句下包含查询集中的相关模型,以便稍后调用模板中的相关模型不会导致新的数据库命中。
第三,你的不同部分中有很多代码引用我假设你定义的字段和方法,但是如果没有直接看到它们,我就无法判断你究竟在做什么。目前无法给出更直接的答案。