我正在使用Django REST Framework的ModelViewSet。在" ModelViewSet-1"中,我需要将POST(创建)请求分解为3个部分。第一部分将由" ModelViewSet-1"我需要将另外两部分委托给" ModelViewSet-2"和" ModelViewSet-3"分别。有人可以建议工作流程吗?
目前,我正在考虑使用python的请求'库,从' ModelViewSet-1"发送循环HTTP调用;到其他ModelViewSets。但这看起来并不优雅。
答案 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