Django的开放时间对db的影响较小

时间:2015-02-10 18:46:30

标签: python django

我试图创建一个结构来显示食品公司的开放时间,并按照" 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)

所以,现在问题出现在模板中,我需要一定要抓住这些信息:

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 %}

1 个答案:

答案 0 :(得分:1)

首先,执行.order_by('?')随机化您的查询集,然后在Python中进行排序。随机排序会导致查询在数据库端占用更多的处理时间,然后在Python中对其进行排序是其自身的额外处理时间。我会考虑使用Django的方法对您的查询集进行排序,而是通过在.order_by()中指定要排序的字段。

其次,减少数据库命中的一种方法是在查询集上使用.select_related()。这将在单个SQL语句下包含查询集中的相关模型,以便稍后调用模板中的相关模型不会导致新的数据库命中。

第三,你的不同部分中有很多代码引用我假设你定义的字段和方法,但是如果没有直接看到它们,我就无法判断你究竟在做什么。目前无法给出更直接的答案。