Сериализатор в django не имеет данных - PullRequest
1 голос
/ 02 апреля 2020
>>> user = User.objects.create_user(username = "testusername", password = "testpassword")
>>> user_serializer = UserSerializer(user)
>>> user_serializer
UserSerializer(<User: testusername>):
>>> user_serializer.is_valid()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/user/Virtual Environments/project/lib/python3.6/site-packages/rest_framework/serializers.py", line 228, in is_valid
    'Cannot call `.is_valid()` as no `data=` keyword argument was '
AssertionError: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance.
>>> user_serializer.data
{}

UserSerializer:

class UserSerializer(serializers.Serializer):
    def create(self, validated_data):
        return User.objects.create_user(**validated_data)

    def __str__(self):
        return f"Username: {self.data['username']}  Password: {self.data['password']}"

    class Meta:
        model = User
        fields = ['username', 'password']

Я не понимаю, что происходит не так. User_serializer.data пуст. Любая помощь будет оценена

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

Вам следует наследовать ваш класс сериализатора от serializers.ModelSerializer вместо serializers.Serializer


class UserSerializer(<b>serializers.ModelSerializer</b>):
    class Meta:
        model = User
        fields = ['username', 'password']

Затем сериализовать ваши данные,

user = User.objects.create_user(username = "testusername", password = "testpassword")
user_serializer = UserSerializer(user)
print(user_serializer.data)

Примечание:
Если вы хотите sh использовать serializers.Serializer класс, вы должны явно указать поля как,

class UserSerializer(<b>serializers.Serializer</b>):
    <b>username = serializers.CharField()
    password = serializers.CharField()</b>

    class Meta:
        model = User
        fields = ['username', 'password']
0 голосов
/ 02 апреля 2020

Ошибка говорит сама за себя:

Невозможно вызвать .is_valid(), поскольку не было передано ни одного ключевого аргумента data= при создании экземпляра сериализатора.

Нет необходимости вызовите user_serializer.is_valid(), поскольку вы передаете объект User в сериализатор. Попробуйте удалить его.

user = User.objects.create_user(username = "testusername", password = "testpassword")
user_serializer = UserSerializer(user)
print(user_serializer.data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...