3

Django1.4.2とTastypie0.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では、脱水サイクルを使用して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 に答える