使用多个ModelViewSet进行REST调用

时间:2015-07-30 13:21:10

标签: python django rest design-patterns django-rest-framework

我正在使用Django REST Framework的ModelViewSet。在" ModelViewSet-1"中,我需要将POST(创建)请求分解为3个部分。第一部分将由" ModelViewSet-1"我需要将另外两部分委托给" ModelViewSet-2"和" ModelViewSet-3"分别。有人可以建议工作流程吗?

目前,我正在考虑使用python的请求'库,从' ModelViewSet-1"发送循环HTTP调用;到其他ModelViewSets。但这看起来并不优雅。

1 个答案:

答案 0 :(得分:1)

可以调用其他ModelViewSets,但不推荐(由我)。但是如果这就是你真正想做的事情,你可以这样做:

class ViewSet3(ModelViewSet):
    def create(self, request):
        # Preproccess 
          ....

        # Call view 1 & 2
        response1 = ViewSet1.as_view({'post': 'create'})(request)
        response2 = ViewSet2.as_view({'post': 'create'})(request)

但是,您更有可能只需要在序列化程序上使用custom create方法来处理创建所有其他对象,而不是多个视图(我假设您使用的是JSON)。

class View3Serializer(serializers.Serializer):
    # my nested fields
    view_1_data = View2Serializer(required=False)
    view_2_data = View3Serializer(required=False)

    def create(self, validated_data):
        view_1_data = validated_data.pop('view_1_data', None)
        view_2_data = validated_data.pop('view_2_data', None)

        # Create my View3 object normally
        instance = View3Model.objects.create(**validated_data)

        # Create other objects with other data here
          ....

        return instance