Django REST framework 3.8

3.8 版本是一个以维护为重点的版本,它解决了大量以前悬而未决的问题,并为未来的变化奠定了基础。


资金 (Funding)

如果您在商业上使用 REST framework,并且希望看到这项工作继续进行,我们强烈鼓励您通过注册付费计划来投资其持续开发。

我们要特别感谢我们的高级支持者,RoverSentryStreamMachinalisRollbar


突破性变化 (Breaking Changes)

在 Field 上改变 read_onlydefault 的行为 (Altered the behaviour of read_only plus default on Field.)

#5886 read_only 字段现在总是被排除在可写字段之外。

以前的 read_only 字段在与 default 值组合时将使用 default 来创建和更新操作。这在某些情况下是违反直觉的,并导致难以支持可空关系上的点状 source 属性。

为了维护旧的行为,您可能需要在视图中调用 save() 时传递 read_only 字段的值:

  1. def perform_create(self, serializer):
  2. serializer.save(owner=self.request.user)

或者,您可以根据需要在序列化器上重写 save()create()update()


弃用 (Deprecations)

action 装饰器替换 list_routedetail_route (action decorator replaces list_route and detail_route)

#5705 list_routedetail_route 已合并为单个 action 装饰器。这改进了视图集操作内省,并允许在未来版本中的可浏览 API 中显示额外的操作。

list_routedetail_route 现在都在等待弃用。它们将在 3.9 中被弃用,并在 3.10 中被完全删除。

新的 action 装饰器采用布尔 detail 参数。

  • 使用 @action(detail=True) 替换 detail_route
  • 使用 @action(detail=False) 替换 list_route

exclude_from_schema

@api_view 装饰器的 APIView.exclude_from_schemaexclude_from_schema 参数现在被弃用了。它们将在 3.9 中完全删除。

对于 APIView,您应该在视图类上设置 schema = None 属性。

对于基于函数的视图,可以使用 @schema 装饰器将视图从模式中排除,方法是使用 @schema(None)


小修正和改进 (Minor fixes and improvements)

此版本中有大量小修正和改进。有关完整列表,请参阅发行说明页面。

What’s next

我们目前正致力于将 OpenAPI 作为默认模式输出。我们还将重新访问 API 文档生成和客户端库。

我们正在进行一些整合以实现这一目标。计划 3.9 将删除 coreapicoreschema 库,而是将 apistar 用于 API 文档生成、模式生成和 API 客户端库。