Django Rest框架:在Viewset中嵌入Viewset

时间:2015-10-07 22:46:52

标签: python django django-rest-framework

我有以下两个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装饰器,我设置了以下网址。

/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)

我想添加以下网址来更改邮件元数据。这样可以在restangular

中更轻松地使用API
/api/participant/:study_id/messages/:msg_id (PATCH partial update of message)

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

1 个答案:

答案 0 :(得分:1)

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

就个人而言,我已经使用Restangular和drf-extensions。附带缓存支持。

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

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