3

我正在使用 Django 1.4.2 和 Tastypie 0.9.11 编写一个 API 服务器。

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

4

2 回答 2

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

于 2013-03-23T02:07:54.320 回答
4

格式化日期可能最好在模板中完成。但是,Tastypie 允许您使用dehydrate 循环添加或修改 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”的新行。

于 2012-11-29T21:37:36.613 回答