问题标签 [drf-queryset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - APIView的POST方法中的Django Rest Framework验证
我是 DRF 的新手,正在尝试构建一个 rest api,我需要为任务执行创建一个 api,而不仅仅是为 CRUD,这就是为什么我将 APIView 的 POST 方法覆盖为:
模型.py:
序列化程序.py:
网址.py:
错误返回:
AttributeError:“str”对象没有属性“values”
更新:完整追溯
但我不知道如何验证请求?当我覆盖 APIView 的 POST 方法时。
发布数据:
}
django - DRF ViewSet 返回空值的 QuerySet
我有一个名为“QueryCriteriaViewSet”的 DRF ViewSet,我在查询构建器中使用它,它允许用户选择一个字段,然后从相关条件中进行选择。因此,例如,用户可以选择“reg_status”字段,然后从“Active”和“Inactive”的相关标准中进行选择。
当我从主要的“人”模型中选择一个字段时,这完全正常。但是当我从“lookup_party”模型等相关模型中选择一个字段时,我遇到了问题。奇怪的是,当我将查询集打印到控制台时,它工作得很好,但是当我调用 API 时,它返回一个空对象列表。
再举一个例子,以下是我拨打电话时发生的情况:
api/querycriteria/?fields=reg_status
返回:
而api/querycriteria/?fields=party__party_name
返回:
即使我print(queryset)
在返回查询集之前,也会打印以下内容:
这是完整的视图集:
让我知道是否有任何其他信息会有所帮助。
这是我的序列化程序:
这是 DynamicFieldsModelSerializer:
django - 如何确保用户只能访问/更新他们创建的数据
我希望创建一个 API,允许用户访问/更新仅由他们上传的书籍的详细信息。用户不应有权访问/更新由其他人创建的图书。
这是我的models.py
:
这是我的serializers.py
:
这是我的views.py
:
如何修改views.py
用户只能访问/更新他创建的书籍?
python - 基于 JSONField 嵌套对象的 Django Rest Framework 过滤器
我正在使用 Python(3)、Django(1.11) 和 DRF 开发一个项目,在该项目中,我必须根据json
保存为JSONFIELD
db 模型的对象字段过滤数据。
这是我尝试过的:
它应该返回 MyModel 记录,
props ID
并且应该能够通过 GET 请求返回所有MyModel objects
位置的 JSON 数组。如果请求的不存在,则 HTTP 响应代码应为 404,否则,响应代码应为 200。 JSON 数组应按 MyModel ID 升序排序。props ID
/mymodel/props/<ID>
props
当我向这个视图发送请求时,它返回一个错误:
那么,如何根据 ? 过滤对象id of props
?
请帮帮我!提前致谢!
python - Django Rest Framework - 通过传递 JSON 对象而不仅仅是 ID 来执行 Put 请求
我正在使用 Python(3)、Django(1.11) 和 DRF(3.6) 开发一个项目,其中我必须PUT
通过传递 anested nested
而不是ID
.
这是我尝试过的:
models.py
:
serializers.py
:
更新:当我提交带有以下对象的发布请求时:
它将此错误返回为:
TypeError: 'ValueError: Cannot assign "OrderedDict([('id', '2790311'), ('login', 'daniel33'), ('avatar_url', 'https://avatars.com/2790311')])": "Event.actor" must be a "Actor" instance.
views.py
:
Sample Input Object
:
要求是:
更新 avatar URLactor
:服务应该能够通过 PUT 请求更新 actor 的 avatar URL /actors
。演员 JSON 在请求正文中发送。如果具有 id 的参与者不存在,则响应代码应该是404
,或者如果有其他字段正在为参与者更新,那么 HTTP 响应代码应该是400
,否则,响应代码应该是200
。**
我对如何在
PUT
不通过ID
?
python - DRF - CreateAPIView 嵌套序列化程序
我有一个有趣的问题,希望得到专家的意见。
我有以下型号。
以下是我的序列化程序:
我的观点:-
一切都按预期工作。请求和响应正常工作。
但是,触发的查询不是预期的方式。在返回数据时,DRF 会触发 3 个额外的查询来过滤 B、C 和 D,从而忽略查询集。
1) 如何让 DRF 触发一个 JOIN 查询?
python - 键入错误以在 django rest 框架中创建和更新我的列表
我正在尝试使用我的 api 来创建和更新捆绑包中的产品。我这样做了:
模型.py
这是我的serializers.py:
我的视图集.py
当我尝试在 bundleproducts 中发布一些产品时,我收到“类型不正确。预期的 pk 值,收到的列表。”
阅读此错误后,我发现了一些与 PrimaryKeyRelatedField 和 SlugRelatedField 相关的问题。我知道我需要覆盖,但我不知道该怎么做。
这是一个如何发布的示例:
在观看了 Neil 评论的视频后,我创建了以下方法:
但不起作用。我收到此错误:“TypeError at /api/v1/bundle/
'name' 是此函数的无效关键字参数"
django - 使用强制身份验证 Django Rest 框架的单元测试
我正在使用 django rest 框架构建 RESTful API 服务,我已经到了必须为我的 RESTful API 服务创建自动化测试的地步。
sessionList api 需要令牌身份验证,以防用户没有令牌,他将无法访问会话集合。
当我使用 POSTMAN 和真正的浏览器对其进行测试时,该 api 运行良好。
会话列表:
然后我使用 DRF 测试创建了一个自动化测试
运行会话测试:
问题:在这两种情况下,如果用户有令牌或没有响应值是 HTTP_200_OK
我试图通过尝试不同的方法来实现测试来解决这个问题。我使用过 APIRequestFactory,也使用过 APIClient,但得到了相同的结果。老实说,多次阅读文档后,我无法理解 APIClient 和 APIRequestFactory 之间的区别。
测试结果:
我会很感激你的帮助。
django-models - 我无法通过请求的用户使用 drf 序列化程序和 CreateAPIView 获取对象名称
我有:object1 与 OneToOneField 与用户,object2 与 ForeignKeys 与用户和 object1。
在序列化程序中,我想检索 object1 的名称并将其作为 object2 中的默认名称。createAPIView 禁止获取操作,而我可以将 hiddenfield 与 currentDefaultUser 一起使用。如何获取用户 ID 并使用它来检索 object1?我应该使用 retreive 并创建 mixins 吗?
楷模
序列化器
意见
我想得到object1_name。
django - 使用 DRF 进行序列化时如何减少递归 MPTT 树查询
从事电子商务项目。项目有相关模型。类别模型具有 MPTT 继承。它使用 Django Rest Framework 在 API 之间进行通信。一个外国服务最近希望我将完整的类别路径放入我这边的 XML 响应中。但是这个请求导致了非常高的数据库查询。我需要减少查询,但我不知道如何在 DRF 序列化中做到这一点。我尝试了几种方法。我的最终方法是下面的模型视图和序列化。
一些 DRF 视图集将模型数据呈现为 XML
这是获取数据的序列化程序:
在我的测试数据库上,如果我不使用 get_full_category_path 方法,则有 20 个 ish 查询记录到记录器中。当我需要使用该方法来获取完整类别路径查询时,查询会上升到 100 多个。
我发布了我最近的尝试。我也尝试使用 MPTT 的 get_ancestors 方法,但它不受数据库命中计数的影响。无论哪种方式,对每个产品对象序列化都会产生非常大量的类别模型查询。
PS:我知道最好的选择是缓存树,但我真的想知道在进行递归 MPTT 查询时是否有办法减少 DB 命中。