Поле ManyToMany django не работает, не принимает никаких данных в POST запросе?
У меня есть 2 модели - модуль и комната. Модуль может иметь ноль или несколько комнат, а комната может быть добавлена в несколько модулей. Таким образом, между ними существует простое отношение "многие ко многим". Но когда я определяю это в файле module/models.py, он не принимает никаких входных данных в виде 'rooms'. вот мои файлы -
module/model.py -
class Module(models.Model):
module_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=100)
desc = models.TextField()
rooms = models.ManyToManyField(Rooms)
rooms/model.py -
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)
is_deleted = models.BooleanField(default=False)
module/serializers.py -
class ModuleSerializer(serializers.ModelSerializer):
rooms = RoomSerializer(read_only=True, many=True)
class Meta:
    model = Module
    fields = "__all__"
module/views.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(module_serializer.errors, status = status.HTTP_400_BAD_REQUEST)
Тело запроса POST для создания модуля в POSTMAN -
{
    "rooms": [
        {
            "room_id": 2,
            "title": "4",
            "desc": "22",
            "level": "2",
        }
    ],
    "title": "4",
    "desc": "22",
}
С помощью этого запроса создается модуль, но в него не добавляется комната.
Может ли кто-нибудь сказать мне, почему мои комнаты не добавляются при создании модулей?
Вам необходимо написать явный метод создания сериализатора для поддержки записываемых вложенных представлений.
https://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations
Пример:
class ModuleSerializer(serializers.ModelSerializer):
    rooms = RoomSerializer(many=True) # remove *read_only=True*
    class Meta:
        model = Module
        fields = "__all__"
    def create(self, validated_data):
        rooms_data = validated_data.pop('rooms')
        module = Module.objects.create(**validated_data)
        for data in rooms_data:
            room, created = Rooms.objects.get_or_create(**data)
            module.rooms.add(room)
        return module