Django视图:如何在模板中渲染之前修改返回的查询集?

时间:2013-05-16 18:41:44

标签: python django python-2.7 graph

我正在尝试用Python 2.7和Django 1.5创建一个简单的天气JSON API。

我的WeatherData模型如下所示:

class WeatherData(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    temp_f = models.DecimalField()

在我的观看中,我想将Django存储的created_at日期时间对象转换为UTC秒。(我知道会出现时区问题。)

我已经知道如何将datetime对象(名为MYTIME)转换为秒:

import time
time.mktime(MYTIME.timetuple())

但是,当我定义queryset = WeatherData.objects.all()时,我无法找到一种方法将这些日期时间对象即时转换为UTC秒,同时保持queryset对象。 简而言之,我想在模板中渲染之前修改视图中返回的查询集。

我是使用Django和MySQL的新手,但我想有办法做到这一点。

注意:我正在使用TastyPie,因此我无法直接访问模板文件。我在ModelResource类中指定了queryset字段:

class WeatherResource(ModelResource):
    class Meta:
        queryset = WeatherData.objects.all()
        fields = ['created_at' 'temp_f']

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您不必修改它,只需向执行此操作的WeatherData类添加方法,并在模板中为查询集中的每个对象调用方法:

import time
class WeatherData(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    temp_f = models.DecimalField()

    def created_at_utc(self):
        # whatever logic you need to do the conversion
        return time.mktime(self.created_at.timetuple())

并在您的模板中执行此操作:

{% for data in deatherdata %}
    data.created_at_utc
{% endfor %}

我希望它有所帮助!