我有以下两个 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,我为每个模型设置了一个 ModelSerializer 和 ModelViewSet。使用 @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/participant/:study_id/messages/:msg_id (PATCH partial update of message)
如果有一种方法可以在 Participant 中嵌入一个 Message ViewSet 会很好,因为这也会使消息上的 GET 和 POST 逻辑更简单。这可能吗?如果不是,我如何将 msg_id 传递给消息上的@detail_rouet?
请您参考如下方法:
这是嵌套路由器的情况。在已经提到的旁边,我将命名为https://github.com/chibisov/drf-extensions
就个人而言,我使用了带有 drf-extensions 的 Restangular。附带缓存支持。
关于如何启用嵌套路由的两个提示:
- 您必须在您的 View 集中声明它运行的模型
- 您必须正确遵循嵌套路由器定义。
