use*_*926 5 django django-rest-framework
我需要采用一个在EPOCH中具有字段"starttime"的表单并将其转换为
当我有:
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True
class Meta:
ordering = ('created',)
Run Code Online (Sandbox Code Playgroud)
import time
class SnippetSerializer(serializers.ModelSerializer):
starttime = serializers.SerializerMethodField('epoch')
def epoch(self, obj):
""" Return epoch time for a datetime object or ``None``"""
try:
return int(time.mktime(obj.created.timetuple()))
except (AttributeError, TypeError):
return None
class Meta:
model = Snippet
fields = ('starttime')
Run Code Online (Sandbox Code Playgroud)
如果我:
"GET"/ snippets/1 /
{"id":1,'starttime':13232111}
我希望能够做到:
"POST"/ snippets/1/{"id":1,'starttime':1}
{"id":1,'starttime':1}
现在,它只是忽略了请求.我被迫使用unix纪元时间来符合现有的API.
Kev*_*one 18
要与重写编写自己的串行现场子类to_native(),并from_native()针对实际的转换.这是我的尝试:
class UnixEpochDateField(serializers.DateTimeField):
def to_native(self, value):
""" Return epoch time for a datetime object or ``None``"""
import time
try:
return int(time.mktime(value.timetuple()))
except (AttributeError, TypeError):
return None
def from_native(self, value):
import datetime
return datetime.datetime.fromtimestamp(int(value))
Run Code Online (Sandbox Code Playgroud)
然后在Serializer定义中使用该字段:
class SnippetSerializer(serializers.ModelSerializer):
starttime = UnixEpochDateField(source='created')
Run Code Online (Sandbox Code Playgroud)
小智 14
适应Django Rest Framework 3的Kevin Stone代码:
class UnixEpochDateField(serializers.DateTimeField):
def to_representation(self, value):
""" Return epoch time for a datetime object or ``None``"""
import time
try:
return int(time.mktime(value.timetuple()))
except (AttributeError, TypeError):
return None
def to_internal_value(self, value):
import datetime
return datetime.datetime.fromtimestamp(int(value))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3813 次 |
| 最近记录: |