import time
class TimestampField(serializers.Field):
def to_representation(self, value):
return int(time.mktime(value.timetuple()))
class MySerializer(serializers.ModelSerializer):
ts = TimestampField(source="my_fieldname") #Source must be a models.DateTimeField
class Meta:
model = myModel
fields = ('id', 'ts')
import datetime
print datetime.datetime.now().strftime('%s') #datetime formatted as seconds for REST
import time #This is just for confirmation
print time.mktime(datetime.datetime.now().timetuple()) #time object result as float
休息的结果是
1)1517863184.666435
2)1517863249
我没能让汤姆的榜样起作用,而且这些价值观似乎没有被修改。然而,它给了我一个起点,经过一番阅读,我找到了一种方法来产生预期的结果:
[方法1]
序列化程序.py
JSON输出:
[方法2]
Tom的解释和前面提到的方法显然更符合维护标准(因为结果实际上是整数类型的)。
然而,一个快速而肮脏的解决方案是指定format parameter for the DateTimeField并将其设置为以秒为单位显示值。
请注意,这可能无法在Windows计算机上正常工作! 并可能导致值错误:无效的格式字符串
要进行测试,只需在序列化程序字段中包含“format”关键字参数,如下所示:
序列化程序.py
JSON输出:
此外,还可以包括微秒:
如果要在您自己的解释器中测试功能(以验证您的操作系统是否支持%s参数),请复制以下行:
我觉得这个方法与OPs问题有点不一致,因为结果实际上不是integer类型,而是integer/float的字符串表示,REST会在值周围加引号。
你要写一个custom serializer field,就像这样:
为了支持写操作,您需要从
WritableField
继承并实现from_native()
。相关问题 更多 >
编程相关推荐