我正在使用Django 1.4.2和Tastypie 0.9.11编写API服务器。
对于所有日期时间输出,我使用默认的iso 8601格式,例如:" 2012-11-20T02:48:19 + 00:00"。但我想得到一个" 2012-11-20T02:48:19Z"格式。如何在不自定义每个日期时间字段的情况下轻松完成?
答案 0 :(得分:9)
此页面http://django-tastypie.readthedocs.org/en/latest/serialization.html中有一个名为TASTYPIE_DATETIME_FORMATTING的配置。但是,这为您提供了有限的选项(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
答案 1 :(得分: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”的新行。