我正在使用Django REST Framework APIViews在我的模型周围实现REST API。其中一个模型如下:
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(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请求时,以及在创建新对象时,日期updated_on
和apis/hadithtags
的格式会有所不同。 apis/hadithtags
上的POST请求并获取新对象。前者返回以下格式:
[{&#34;名称&#34;:&#34;试验&#34;&#34; ADDED_ON&#34;:&#34; 2015-07-04T21:57:25Z&#34;,& #34; updated_on&#34;:&#34; 2015-07-04T21:57:25Z&#34;}]
后者回归:
{&#34;名称&#34;:&#34;试验&#34;&#34; ADDED_ON&#34;:&#34; 2015-07-04T21:57:25.288083Z&#34;,& #34; updated_on&#34;:&#34; 2015-07-04T21:57:25.288118Z&#34;}
如您所见,执行GET会返回没有毫秒的日期时间,而执行POST会返回包含毫秒的日期时间。
当我尝试使用Java的Gson库来解析日期时,这会导致问题。它与第一个成功,但与第二个成功。
有什么想法吗?
答案 0 :(得分:1)
我认为您正在看到此问题,因为当您执行发布请求时,Django会创建一个带有微秒的日期。但是,当您保存到数据库时,会截断微秒,因此稍后执行get请求时会得到不同的结果。在Django 1.8中的MySQL的DateTime字段中添加了支持微秒。
您可以明确定义DateTimeField
,并指定所需的日期格式。有关日期格式的说明,请参阅this page。
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']