Как принимать входные данные из поля ManyToManyField в django?

У меня есть 2 модели - комнаты и модули. Модуль может содержать много комнат, а комната может содержать много разных модулей. ниже приведены модели -

Модель комнаты -

class Rooms(models.Model):
    room_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    desc = models.TextField()
    level = models.CharField(max_length=100)

Модель модуля -

class Module(models.Model):
    module_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    desc = models.TextField()
    is_deleted = models.BooleanField(default=False)
    rooms = models.ManyToManyField(Rooms)

Модуль serializer -

class ModuleSerializer(serializers.ModelSerializer):
    rooms = RoomSerializer(read_only=True, many=True)
    class Meta:
        model = Module
        fields = "__all__"

Файл модуля view.py -

class add_module(APIView):
    def post(self, request, format=None):
            module_serializer = ModuleSerializer(data=request.data)
            if module_serializer.is_valid():
                module_serializer.save()
                return Response(module_serializer.data['module_id'], status = status.HTTP_201_CREATED)
            return Response("response":module_serializer.errors, status = status.HTTP_400_BAD_REQUEST)

Как мне принять несколько комнат в качестве входных данных в файле views.py при создании объекта моего модуля. Также если я хочу протестировать свой API в postman, то как я могу принять несколько входов в postman.

Вы можете использовать аналогичную конструкцию:

class ModuleSerializer(serializers.ModelSerializer):
   rooms = RoomSerializer(read_only=True, many=True)


   class Meta:
       model = Module
       fields = "__all__"


   def create(self, validated_data):
       rooms = validated_data.pop('rooms')
       ...
       for room in rooms:
           ...
       return Response(...)
Вернуться на верх