Как принимать входные данные из поля 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(...)