Django-Rest-Framework POST-запрос c многоуровневым json, как прописать представление?

у меня есть следующие модели и представления: мои модели:

class Modules(models.Model):
    module_name = models.CharField(max_length=50)
    module_duaration = models.IntegerField()
    class_room = models.IntegerField()

    def __str__(self):
        return self.module_name

class Students(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()
    grade = models.IntegerField()
    modules = models.ManyToManyField(Modules)

    def __str__(self):
        return self.name

Мои представления:

class StudentsViewSet(viewsets.ModelViewSet):
    serializer_class = StudentsSerializer

    def get_queryset(self):
        student = Students.objects.all()
        return student

    def create(self, request, *args, **kwargs):
        data = request.data

        new_student = Students.objects.create(
            name=data["name"], age=data['age'], grade=data["grade"])

        new_student.save()

        for module in data["modules"]:
            module_obj = Modules.objects.create(module_name=module["module_name"],
                                                module_duaration=module["module_duaration"],
                                                class_room=module["class_room"])
            new_student.modules.add(module_obj)

        serializer = StudentsSerializer(new_student)

        return Response(serializer.data)

Это позволяет мне через post отправлять такие данные:

{
    "name": "gb",
    "age": 11,
    "grade": 22,
    "modules": [
        {
            "module_name": "erer",
            "module_duaration": 1,
            "class_room": 1
        },
        {
            "module_name": "rer",
            "module_duaration": 2,
            "class_room": 2
        }, ...
    ]
}

Данное решение работает корректно, но теперь мне необходимо добавить еще один уровень в json чтобы получилось следующее:

{
    "vadim": "test1",
    "stud": [
         {
        "name": "bbbg",
        "age": 10,
        "grade": 10,
        "modules": [
            {
            "module_name": "erer",
            "module_duaration": 1,
            "class_room": 1
            },
            {
             "module_name": "rer",
            "module_duaration": 2,
            "class_room": 2
            }
        ]
        }
    ]
}

Если предположим, что мои модели выглядят следующим образом:

class Modules(models.Model):
    module_name = models.CharField(max_length=50)
    module_duaration = models.IntegerField()
    class_room = models.IntegerField()
    
    def __str__(self):
        return self.module_name

class Students(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()
    grade = models.IntegerField()
    modules = models.ManyToManyField(Modules)

    def __str__(self):
        return self.name

class Vadim(models.Model):
    vadim = models.CharField(max_length=50)
    stud = models.ForeignKey(Students, on_delete=models.CASCADE)

То как будет выглядеть мой views? Пробовал прописать разные варианты, постоянно упираюсь в ошибки

Один из неудачных вариантов:

class VadimViewSet(viewsets.ModelViewSet):
    serializer_class = VadimSerializer

    def get_queryset(self):
        vadim = Vadim.objects.all()
        return vadim

    def create(self, request, *args, **kwargs):
        data = request.data

        new_vadim = Vadim.objects.create(
            vadim=data["vadim"])

        new_vadim.save()

        for student in data["stud"]:
            student_obj = Students.objects.create(name=student["name"],
                                                age=student["age"], grade=student["grade"],
                                                  modules=student["modules"])

            for module in student_obj["modules"]:
                module_obj = Modules.objects.create(module_name=module["module_name"],
                                                 module_duaration=module["module_duaration"],
                                                 class_room=module["class_room"]
                                                )

                new_vadim.modules.add(student_obj, module_obj)

        serializer = VadimSerializer(new_vadim)

        return Response(serializer.data)

В данном случае получаю следующие ошибки:

Traceback (most recent call last):
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Users\root\PycharmProjects\Project1\spacefarm\database\views.py", line 130, in create
    student_obj = Students.objects.create(name=student["name"],
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\db\models\query.py", line 455, in create
    obj = self.model(**kwargs)
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\db\models\base.py", line 502, in __init__
    _setattr(self, prop, kwargs[prop])
  File "C:\Users\root\PycharmProjects\Project1\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 545, in __set__
    raise TypeError(
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use modules.set() instead.
[08/Apr/2022 11:36:30] "POST /vadim/ HTTP/1.1" 500 108480

Ответы (0 шт):