首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >generics.RetrieveUpdateDestroyAPIView和generics.ListCreateAPIView格式日期不同

generics.RetrieveUpdateDestroyAPIView和generics.ListCreateAPIView格式日期不同
EN

Stack Overflow用户
提问于 2015-07-04 22:07:06
回答 1查看 400关注 0票数 0

我使用Django REST框架APIViews来围绕我的模型实现REST。其中一种模式如下:

代码语言:javascript
复制
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

它有以下序列化程序:

代码语言:javascript
复制
class HadithTagSerializer(serializers.ModelSerializer):
  class Meta:
    model = HadithTag
    fields = ['name', 'added_on', 'updated_on']

以及以下URL模式:

代码语言:javascript
复制
url(r'^apis/hadithtags/$', apiviews.HadithTagSetView.as_view()),
url(r'^apis/hadithtags/(?P<pk>\w+)$', apiviews.HadithTagView.as_view()),

以及以下API视图类:

代码语言:javascript
复制
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/hadithtagsupdated_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时,这会造成问题。第一个成功了,第二个失败了。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-04 23:16:21

我认为您看到了这个问题,因为Django在处理post请求时用微秒创建了一个日期。但是,当您保存到数据库时,微秒会被截断,所以稍后执行get请求时会得到不同的结果。支持在DateTime字段中添加了微秒,在Django 1.8中的MySQL中添加支持。

可以显式定义DateTimeField,并指定所需的日期格式。有关日期格式的说明,请参见此页

代码语言:javascript
复制
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']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31225467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档