Django中的序列化器没有任何数据

问题描述 投票:0回答:1
>>> 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为空。任何帮助,将不胜感激

django django-rest-framework django-testing django-serializer
1个回答
1
投票

您应从serializers.ModelSerializer而不是serializers.Serializer

继承序列化程序类

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

0
投票

错误说明自身:

无法调用.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)
© www.soinside.com 2019 - 2024. All rights reserved.