Python Django中的打开时间,对db的命中率较低
我试图创建一个结构来显示食品公司的开放时间,按“开放”状态排序。但我不知道如何才能在我的模板上获得信息。例如:Python Django中的打开时间,对db的命中率较低,python,django,Python,Django,我试图创建一个结构来显示食品公司的开放时间,按“开放”状态排序。但我不知道如何才能在我的模板上获得信息。例如: #models.py class Company(Model): #... fields ... def __unicode__(self): return u'%s'%self.title 在这里,我将存储所有时间和日期 class OpeningHours(Model): class Meta: verbose_name =
#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)
所以,现在问题出在模板中,我需要某种方法来捕捉这些信息:
html-这是我需要对模板执行的操作
{%为公司中的公司%}
{%if company.open%}
打开
{%else%}
关闭
{%endif%}
{%ifequal company.open today%}
第二天将于今天在{{company.Next_time_open}
{%ifequal company.open另一天%}
第二天的营业时间是星期天,地点是{company.Next_time_open}
{%else%}
等等,现在从22点到00点开门
{%endif%}
{%endfor%}
首先,执行.order\u by(“?”)
是将查询集随机化,然后在Python中排序。随机排序会导致查询在数据库端花费更多的处理时间,然后在Python中对其进行排序是其自身额外的处理时间。我会考虑使用Django的方法来排序您的查询集,而不是通过在。在queryset上选择_related()
。这将在单个SQL语句下的queryset中包含相关模型,以便以后对模板中相关模型的调用不会导致新的数据库命中
第三,在您的不同部分中有很多代码引用了我认为您已经定义的字段和方法,但是如果不直接查看它们,我无法判断您到底在做什么。现在不可能给您一个更直接的答案。为什么不在sql查询中排序呢?你为什么要用python对结果进行排序?Joran,问题是我如何在不太多次点击数据库的情况下获得这些信息,你有什么建议吗?我需要捕捉信息,就像我在template.html中输入的一样,但我可以得到它。
{% 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 %}