Вызов метода создания ModelViewSet из другого ModelViewSet

Мне нужно создать объекты модели B из файла views.py файла A. Я смог сделать это с помощью сериализатора B (см. # OLD METHOD using serializer), но мне хотелось бы знать, как использовать метод create набора B из набора A

В функции generate_drf_format я попытался вручную создать и вызвать действие create в Viewset B, но это не работает. Я получаю сообщение об ошибке:

AttributeError: у объекта 'ViewSetB' нет атрибута 'request'

class BViewSet(viewsets.ModelViewSet):
    queryset = B.objects.all()
    serializer_class = BSerializer



 class ViewSetA(viewsets.ModelViewSet):
     queryset = A.objects.all()
     serializer_class = ASerializer
 
     def create(self, request, *args, **kwargs):
         form_data = request.data
 
         # map front-end request to DRF model
         mapped_data = generate_drf_format(form_data)
 
         serializer = self.get_serializer(data=mapped_data)
         serializer.is_valid(raise_exception=True)
         self.perform_create(serializer)
         headers = self.get_success_headers(serializer.data)
         return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)




def generate_drf_format(form_data):
    participants_ids = []
    if 'participants' in form_data:
        participants_list = form_data['participants']

        if len(participants_list) > 0:
            request = HttpRequest()
            for participant_data in participants_list:
                    request.data = participant_data

                    # Manually instantiate and invoke action in Viewset B
                    viewset_b = UserViewSet()
                    viewset_b.create(request=request)

                    # OLD METHOD using serializer
                    # b_serializer = BSerializer(data=participant_data)
                    # if b_serializer.is_valid():
                    #     b_serializer.save()
                    #     participants_ids.append(b_serializer.data['id'])
                    # else:
                    #     return Response(b_serializer.errors)

    new_data = generate_some_obj(form_data, participants_ids)
    return new_data

Подскажите, как вызвать метод create одного набора представлений из другого набора представлений

Обработчики методов для class ViewSet привязываются к соответствующим действиям только в момент финализации представления с помощью метода .as_view().

Поэтому, чтобы вручную вызвать обработчик метода class ViewSet, вы должны сначала финализировать class ViewSet.

viewset_b = ViewSetB.as_view({"post": "create"})
viewset_b(request=request) #[1]

[1] Ensure that the request object is completely instantiated and will not cause a permission error, method not allowed error or any other type of error.

Вернуться на верх