Django Rest Framework преобразует мой APIView в ModelViewSet

У меня следующая модель,

class Schema(models.Model):
    week = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(53)])
    users = models.ManyToManyField(MyUser, related_name="users")

    class Meta:
        ordering = ('week',)

В модели хранится номер недели и список пользователей, относящихся к этому номеру недели. Затем я создал APIView, где GET запрос получает все схемы (моя модель), а POST запрос делает следующее, если номера недели нет в базе данных, то он просто создает строку в базе данных для заданного номера недели и заданных пользователей.

Если номер недели уже присутствует в базе данных, то я просто перезаписываю пользователей, относящихся к этому номеру недели, новыми пользователями, представление выглядит следующим образом,

class SchemaView(APIView):
    permission_classes = (SchemaPermissions,)

    def get(self, request):
        schemas = Schema.objects.all()
        serializer = SchemaSerializer(schemas, many=True)

        return Response(serializer.data)

    def post(self, request):
        data = request.data
        serializer = SchemaSerializer(data=data)
        if serializer.is_valid():
            input_data = serializer.validated_data
            week = input_data.get('week')
            user_ids = input_data.get('user_ids')
            if Schema.objects.filter(week = week).count() > 0:
                schema = Schema.objects.get(week = week).first()
            else:
                schema = Schema.objects.create(week = week)
            schema.users.set(user_ids)
            schema.save()

            return Response(SchemaSerializer(schema).data, status=status.HTTP_200_OK)
        else:
            return Response(status = status.HTTP_400_BAD_REQUEST)

Теперь это работает как ожидалось, однако теперь возникает проблема. Это работает только для одной "схемы" (моей модели) при POST. Я хочу иметь возможность как ПОСТИТЬ одну "схему", так и ПОСТИТЬ несколько "схем". Поэтому я решил изменить APIView на ModelViewSet, затем взять мой текущий метод POST и использовать его в качестве метода create(). А затем каким-то образом реализовать другой метод, который обрабатывает случай, когда размещается несколько "схем".

Будет ли это нормальным способом сделать это, или есть более простой способ сделать это с моей текущей точки зрения. Если да, то как мне преобразовать APIView в ModelViewSet с помощью указанных функций.

Мне также нужно будет создать маршрутизатор для моих урлов, или что?

Я, что называется, новичок в Django и пытаюсь научиться, поэтому любая помощь будет высоко оценена!

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