Пароль должен быть строкой или байтом, полученным из списка Django Rest Framework

У меня есть API, в котором есть конечная точка createaccount. При создании пользователя я передаю пароль, и пароль передается в виде строки. Однако, когда он передается в сериализатор, он выходит в виде списка, что вызывает эту ошибку: Password must be a string or bytes, got list эта ошибка также дублируется на два других моих атрибута, имя пользователя и тип_аккаунта, как показано ниже. Мне пришлось выполнять понимание списка, получая первый элемент списков, чтобы получить значения, что, по моему мнению, является неправильным способом решения этой проблемы.

Вот мой models.py для модели Account со связанным с ней Manager:

from django.db import models
import django.contrib.auth.models as auth_models


    class AccountManager(auth_models.BaseUserManager):
        def create_user(self, username, account_type, password=None):
            if not account_type:
                raise ValueError("Users must have an account type")
            if not username:
                raise ValueError("Users must have a username")
    
            requested_account_type = account_type[0]
            user = self.model(username=username, account_type=requested_account_type)
    
            user.set_password(password[0])
            user.save(using=self._db)
            return user
    
        def create(self, username, account_type):
            if not account_type:
                raise ValueError("Users must have an account type")
            if not username:
                raise ValueError("Users must have a username")
    
            requested_account_type = account_type[0]
            user = self.model(username=username, account_type=requested_account_type)
            user.save(using=self._db)
            return user
    
        def create_superuser(self, username, password, account_type="jool-admin"):
            user = self.create_user(
                password=password, username=username, account_type=account_type
            )
            user.is_admin = True
            user.is_staff = True
            user.is_superuser = True
            user.save(using=self._db)
            return user
    
    
    class Account(auth_models.AbstractBaseUser):
    
        username = models.CharField(max_length=40, unique=True, primary_key=True)
    
        ACCOUNT_TYPE_CHOICES = (
            ("admin", "Admin"),
            ("manager", "Manager"),
            ("staff", "Staff"),
        )
    
        account_type = models.CharField(
            choices=ACCOUNT_TYPE_CHOICES,
            default="EMPLOYEE",
            blank=False,
            null=False,
            max_length=10,
        )
        date_joined = models.DateTimeField(verbose_name="Date Joined", auto_now_add=True)
        is_admin = models.BooleanField(default=False)
        is_active = models.BooleanField(default=True)
        is_staff = models.BooleanField(default=False)
        is_superuser = models.BooleanField(default=False)
    
        USERNAME_FIELD = "username"
        REQUIRED_FIELDS = ["account_type"]
    
        objects = AccountManager()

Вот сериализатор для модели:

class AccountSerializer(serializers.ModelSerializer):
    def create(self, validated_data):
        user = Account.objects.create_user(**validated_data)
        return user

    class Meta:
        model = Account
        fields = "__all__"

Вот представление для конечной точки:

class UserRecordView(views.APIView):
    """
    API View to create or get a list of all the registered
    users. GET request returns the registered users whereas
    a POST request allows to create a new user.
    """

    permission_classes = [CanViewUserRecord, permissions.IsAuthenticated]

    def get(self, format=None):
        users = Account.objects.all()
        serializer = AccountSerializer(users, many=True)
        return response.Response(serializer.data)

    def post(self, request):
        serializer = AccountSerializer(data=request.data)
        if serializer.is_valid(raise_exception=ValueError):
            serializer.create(validated_data=request.data)
            return response.Response(serializer.data, status=status.HTTP_201_CREATED)
        return response.Response(
            {
                "error": True,
                "error_msg": serializer.error_messages,
            },
            status=status.HTTP_400_BAD_REQUEST,
        )

Я заметил, что параметр data, который вызывает сериализатор, является первым экземпляром, где все значения являются списками:

data=<QueryDict: {'username': ['test2'], 'password': ['test123'], 'account_type': ['admin']}>

Это вызывает у меня проблемы, поскольку django сохраняет значения в формате списка, поэтому вместо того, чтобы имя пользователя было "test2" в базе данных, оно будет ['test2'], что вызывает множество ошибок при вызове API. Есть идеи, как я могу это исправить или что я делаю не так. Спасибо

Вернуться на верх