【问题标题】:Django Rest Framework: Embed Viewset Inside ViewsetDjango Rest 框架:在 Viewset 中嵌入 Viewset
【发布时间】:2015-10-09 05:44:21
【问题描述】:

我有以下两个 Django 模型(为本示例进行了简化)。

class Participant(models.Model):
    name = models.CharField()
    study_id = models.IntegerField()
    ... 
    # Lots of other fields

class Message(models.Model):
    text = models.CharField()
    participant = models.ForeignKey('Participant')

使用 Django Rest Framework,我为每个模型设置了 ModelSerializerModelViewSet。使用 @detail_route@list_route 装饰器,我设置了以下 URL。

/api/participant/ (GET,POST for list and create)
/api/participant/:study_id (GET,PUT for retrieve and update)
/api/participant/:study_id/messages (GET for list POST to send message)

我想添加以下 url 来更改消息元数据。这将使restangular 中的 API 使用变得更加容易

/api/participant/:study_id/messages/:msg_id (PATCH partial update of message)

如果有办法在Participant 中嵌入Message ViewSet 会很好,因为这也会使消息的GET 和POST 逻辑更简单。这可能吗?如果不是,我如何将 msg_id 传递给消息上的 @detail_rouet?

【问题讨论】:

标签: python django django-rest-framework


【解决方案1】:

这是嵌套路由器的一个例子。除了已经提到的,我将命名https://github.com/chibisov/drf-extensions

就我个人而言,我将 Restangular 与 drf-extensions 一起使用。附带缓存支持。

关于如何启用嵌套路由的两个提示:

  • 您必须在视图集中声明它所操作的模型
  • 您必须正确遵循嵌套路由器定义。

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 2016-06-28
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2019-07-09
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多