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 и пытаюсь научиться, поэтому любая помощь будет высоко оценена!