dj-rest-auth 与 Django ReST Framework JSON API 不兼容?

dj-rest-auth incompatible with Django ReST Framework JSON API?

在 Django (v3.1.2) ReST Framework (DRF v3.12.1) 应用程序中,我正在使用 Django ReST Framework JSON API (DJA) 扩展 (v3.2.0) 以 JSON:API 格式(内容类型 application/vnd.api+json)消耗和生成资源。这个 DJA 扩展提供了它自己的 JSON 解析器和渲染器。

另外,认证资源我选择了dj-rest-auth(v1.1.2)。但是,它似乎与 DJA 不兼容:当我以 JSON:API 格式发出登录请求时,例如

{
    "data": {
        "type": "LoginView",
        "attributes": {
            "username": "user",
            "password": "pwd"
        }
    }
}

服务器无法呈现响应,异常 'dict' object has no attribute 'pk'... python3.8/site-packages/rest_framework_json_api/renderers.py, line 502, in build_json_resource_obj。调试请求,我发现 DJA 期望序列化程序输出 serializer.instance 有一个私钥 (pk) 字段,DJA 渲染器从中派生元数据,例如必须存在于 application/vnd.api+json 资源.

我有两个问题:

  1. 这确实是两个库之间的不兼容,还是我只是以错误的方式组合了它们?是否需要配置某些内容,或者是否需要以某种方式扩展身份验证模型?
  2. 如果确实存在根本性问题,是否有某种方法可以禁用身份验证资源的 DJA?在我看来,DJA 似乎只能为整个 Django 服务器激活或根本不能激活,但它不能只为特定的 Django 应用程序激活。有没有办法为身份验证端点使用和 return 标准 aplication/json 内容?

记录并结束这个问题:我没有找出问题所在。但是,上面描述的确切用例现在可以完美地与以下库组合一起使用:

  • Python 3.9
  • Django 3.1.2
  • Django REST 框架 3.12.1
  • Django REST 框架 JSON API 4.0.0
  • DJ-REST-Auth 1.1.2