2012-11-24 70 views
3

我正在使用Django 1.4.2和Tastypie 0.9.11编写一个API服务器。如何更改tastypie时间格式

对于所有的日期时间输出,我使用默认的iso 8601格式,例如:“2012-11-20T02:48:19 + 00:00”。但我想获得“2012-11-20T02:48:19Z”格式。如何轻松完成而无需自定义每个日期时间字段?

回答

4

格式化日期可能是最好的模板。但是,Tastypie允许您使用dehydrate cycle添加或修改API返回的字段。例如:

# models.py 
class MyModel(models.Model): 
    iso8601_date = models.DateTimeField() 

    class Meta: 
     verbose_name = 'my_model' 

# api.py 
class MyResource(ModelResource): 
    class Meta: 
     queryset = MyModel.objects.all() 

    def dehydrate(self, bundle): 
     # Your original field: bundle.data['iso8601_date'] 

     # Newly formatted field. 
     bundle.data['new_date_format'] = '2012-11-20T02:48:19Z' 
     return bundle 

现在,如果您发出HTTP请求,您应该会看到“new_date_format”的新行。

+0

我知道这个解决方案。但我想知道是否有全球配置解决方案。但最后我用了这个。 ;) –

9

在此页面有一个名为TASTYPIE_DATETIME_FORMATTING的配置http://django-tastypie.readthedocs.org/en/latest/serialization.html。然而,这给你有限的选择(iso-8601 & rfc-2822)。

你可以做的是使用自定义的串行你的资源像

# models.py 
class MyModel(models.Model): 
    class Meta: 
     verbose_name = 'my_model' 

# api.py 
from custom_serializer import MySerializer 
class MyResource(ModelResource): 
    class Meta: 
     queryset = MyModel.objects.all() 
     serializer = MySerializer() 

#custom_serializer.py 
from tastypie.serializers import Serializer 
class MySerializer(Serializer): 
    def format_datetime(self, data): 
     return data.strftime("%Y-%m-%dT%H:%M:%SZ") 

这已经在这里详细 - http://django-tastypie.readthedocs.org/en/latest/serialization.html