django-rest-framework:Serializer数据的“id”字段返回null

时间:2013-09-19 04:24:46

标签: django django-rest-framework

所以我有一个ObjectSerializer,它有一个模型Object的'id'字段的字段(它是一个ModelSerializer)。这是正在发生的事情:

serializer = ObjectSerializer(data=request.DATA)
if serializer.is_valid():
  some_dict = {'field': serializer.data['field']}
  serializer.save()
  return Response(serializer.data, status=status.HTTP_201_CREATED)

响应的'id'字段由于某种原因返回null?当我用some_dict删除该行时,响应返回id okay。

不确定这里发生了什么。任何指针都会非常感激。

1 个答案:

答案 0 :(得分:1)

这很奇怪。 default implementation of the rest_framework.serializers.BaseSerializer data property只是懒惰地填充(私有)_data成员并返回该成员。连续两次调用它 - 这基本上就是你正在做的 - 应该第二次返回相同的值。

你能否将其减少到一个失败的测试用例和submit an issue on Github? - 这确实会有所帮助。

更新

感谢您的报告。

As Tom noted in the discussion您看到了这个问题,因为当您访问数据时save()尚未调用,因此未设置id。 - 在data之后将通话移至save(),您将获得所需的结果。

除此之外,行为现在已经改变,以便在调用data时清除缓存的save() - 这在master中得到修复,应该在下一个版本中。