DRF 将日期时间转换为时间戳作为响应

Che*_*eng 1 django django-rest-framework

我的模型包含一个日期时间字段,我想在请求时将其转换为时间戳。这是get响应的处理程序:

def get(self, request, pk):
    journal = Journal.objects.get(pk=pk)
    serializer = LogSerializer(journal)
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

这是回应:

{
  ...blah...
  "created": "2015-12-02T08:57:16.881528Z",
}
Run Code Online (Sandbox Code Playgroud)

我尝试这样做来获取unix时间戳:

from django.utils.dateformat import format

def get(self, request, pk):
    journal = Journal.objects.get(pk=pk)
    journal.created = format(journal.created, 'U') #error, because the LogSerializer expects a datetime object instead of a string
    serializer = LogSerializer(journal)
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

这是我的序列化器和模型:

class LogSerializer(ModelSerializer):
    class Meta:
        model = Journal


class Journal(Model):
    created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 JSONRender 执行以下操作:

if fieldName == 'created': 
    data['created'] = convert_to_timestamp(data['created'])
Run Code Online (Sandbox Code Playgroud)

或者我应该修改字符串化数据:

content = JSONRender(serializer.data)
... find the position of the time string in content and replace it with the timestamp ...
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用SerializerMethodField它来实现相同的目的。

response_created_date = serializers.SerializerMethodField('get_created_date')

def get_created_date(self, obj):
    return convert_to_timestamp(obj.created)
Run Code Online (Sandbox Code Playgroud)

点击这里查看更多信息。