2012-11-24 5 views
3

장고 1.4.2 및 Tastypie 0.9.11을 사용하여 API 서버를 작성하고 있습니다.tastypie 시간 형식을 변경하는 방법

모든 datetime 출력의 경우 기본 iso 8601 형식을 사용합니다 (예 : "2012-11-20T02 : 48 : 19 + 00 : 00"). 하지만 "2012-11-20T02 : 48 : 19Z"형식을 원합니다. 각 datetime 필드를 사용자 정의하지 않고 쉽게 수행하는 방법은 무엇입니까?

답변

4

날짜 서식 지정은 템플릿에서 수행하는 것이 가장 좋습니다. 그러나 Tastypie를 사용하면 dehydrate cycle을 사용하여 API에서 반환 한 입력란을 추가하거나 수정할 수 있습니다. 예를 들어 사용자가 HTTP 요청을하는 경우

# 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 

지금, 당신은 "new_date_format"에 대한 새로운 라인을 볼 수 있습니다.

+0

나는이 솔루션을 알고 -

은 당신이 할 수있는 것은

# 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") 

이 여기에 설명 된 것처럼 리소스에 대한 사용자 지정 시리얼 라이저를 사용합니다. 하지만 글로벌 구성 솔루션이 있는지 알고 싶었습니다. 그러나 마침내 나는 이것을 사용했다. ;) –

관련 문제