我使用Django REST框架APIViews来围绕我的模型实现REST。其中一种模式如下:
class HadithTag(models.Model):
"""A model describing a tag for hadiths."""
name = models.CharField(max_length=32, primary_key=True)
added_on = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True, auto_now_add=True)
def __unicode__(self):
return self.name它有以下序列化程序:
class HadithTagSerializer(serializers.ModelSerializer):
class Meta:
model = HadithTag
fields = ['name', 'added_on', 'updated_on']以及以下URL模式:
url(r'^apis/hadithtags/$', apiviews.HadithTagSetView.as_view()),
url(r'^apis/hadithtags/(?P<pk>\w+)$', apiviews.HadithTagView.as_view()),以及以下API视图类:
class HadithTagSetView(generics.ListCreateAPIView):
queryset = HadithTag.objects.all()
serializer_class = HadithTagSerializer
class HadithTagView(generics.RetrieveUpdateDestroyAPIView):
queryset = HadithTag.objects.all()
serializer_class = HadithTagSerializer现在我的问题是,由于某种原因,当我在added_on上运行GET请求时,与在apis/hadithtags上创建带有POST请求的新对象并获得新对象时,日期的格式apis/hadithtags和updated_on的返回方式不同。前者返回以下格式:
{“名称”:“测试”,“added_on”:“2015-07-04T21:57:25 Z”,“updated_on”:“2015-07-04T21:57:25 Z”}
当后者返回时:
{“名称”:“测试”,“added_on”:“2015-07-04T21:57:25.28808Z”,"updated_on":"2015-07-04T21:57:25.288118Z"}
如您所见,执行GET将返回没有毫秒的日期时间,而执行POST则返回包含毫秒的日期时间。
当我试图使用Java的Gson库解析datetimes时,这会造成问题。第一个成功了,第二个失败了。
有什么想法吗?
发布于 2015-07-04 23:16:21
我认为您看到了这个问题,因为Django在处理post请求时用微秒创建了一个日期。但是,当您保存到数据库时,微秒会被截断,所以稍后执行get请求时会得到不同的结果。支持在DateTime字段中添加了微秒,在Django 1.8中的MySQL中添加支持。
可以显式定义DateTimeField,并指定所需的日期格式。有关日期格式的说明,请参见此页。
class HadithTagSerializer(serializers.ModelSerializer):
added_on = DateTimeField(format='%Y-%m-%dT%H:%M:%SZ')
updated_on = DateTimeField(format='%Y-%m-%dT%H:%M:%SZ')
class Meta:
model = HadithTag
fields = ['name', 'added_on', 'updated_on']https://stackoverflow.com/questions/31225467
复制相似问题