2

所以我有一个ObjectSerializer,它有一个用于模型对象的“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 没问题。

不太确定这里发生了什么。任何指针将不胜感激。

4

1 回答 1

1

这很奇怪。该属性的默认实现rest_framework.serializers.BaseSerializer data只是懒惰地填充(私有)_data成员并返回它。连续调用它两次——这本质上就是你正在做的——第二次应该返回相同的值。

您能否将其简化为失败的测试用例并在 Github 上提交问题?——那真的很有帮助。

更新

感谢您的报告。

正如汤姆在讨论中指出的那样,您看到了这个问题,因为当您访问数据save()时尚未调用数据,因此id未设置。— 将调用移至dataafter save(),您将获得所需的结果。

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

于 2013-09-19T13:23:28.907 回答