DRF Serializer 没有从 ManyToMany 字段的请求中接收值

DRF Serializer doesn't recieve value from request for ManyToMany field

我的模特是

class ChatRoom(models.Model):
    name = models.CharField(max_length=55, verbose_name='Имя чата', unique=True)
    users = models.ManyToManyField(
        CustomUser, 
        verbose_name='Пользователи', 
        related_name='user_chatrooms', 
        null=True
    )

我的这个模型的序列化器

class ChatRoomSerializer(serializers.ModelSerializer):
    users = UserInfoSerializer(many=True, read_only=False)
    class Meta:
        model = ChatRoom
        fields = [
            'name',
            'users'
        ]

查看外观

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def api_create_chat(request):
    if request.method == 'POST':
        serializer = ChatRoomSerializer(data=request.data)
        data = {}
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我请求(这里是正文)

<QueryDict: {'name': ['benny'], 'users': ['11,1']}>

在这种情况下,我收到错误

{'users': [ErrorDetail(string='This field is required.', code='required')]}

而且我不明白这里出了什么问题。 当我在 UserInfoSerializer 中将参数更改为 read_only=True 时,它起作用了,但它不会将用户添加到新的聊天对象。

{
    "name": "benny",
    "users": []
}

UPD 我尝试添加 create() 方法,但它没有帮助

    def create(self, validated_data):
      users = validated_data.pop('users')
      users = [int(id) for id in users.split(',')]
      chat_instance = ChatRoom.objects.create(name=validated_data.pop('name'))
      for id in users:
          chat_instance.users.add(CustomUser.objects.get(pk=id))
      return chat_instance

UPD 2 UserInfoSerializer

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ['id',]

通过修改 view.py 中的 serializer 解决了问题。这不是一个好决定,但它有效。

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def api_create_chat(request):
    if request.method == 'POST':
        serializer = ChatRoomSerializer(data=request.data)
        data = {}
        if serializer.is_valid():
            serializer.save()
            users_id = [int(id) for id in request.data['users'].split(',')]
            chat = ChatRoom.objects.get(pk=serializer.data['id'])
            for id in users_id:
                user = CustomUser.objects.get(pk=id)
                chat.users.add(user)
                serializer.data['users'].append({'user': user.id, 'username': user.username})
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)