【问题标题】:Serializers update method returning just strings序列化器更新方法只返回字符串
【发布时间】:2020-11-14 20:54:09
【问题描述】:

我对 Django 和 DRF 比较陌生,我创建了一个序列化程序并定义了一个更新方法来覆盖默认值,但是当我在邮递员中测试它时,它只返回用户数据中的字符串,代码示例如下。

'serializers.py'

class UserSerializer(ModelSerializer):
class Meta:
    model = User
    fields = ['username', 'first_name', 'last_name', 'email', 'password']

类 AgentSerializer(ModelSerializer): 用户 = UserSerializer()

class Meta:
    model = Agent
    fields = ['user', 'phone', 'company']

def create(self, validated_data):
    user = validated_data.pop('user')
    new_user = User.objects.create(**user)
    agent = Agent.objects.create(user=new_user, company=validated_data['company'], phone=validated_data['phone'])
    return agent

def update(self, instance, validated_data):
    user = validated_data.pop('user')
    user = instance.user
    user.username = ['username']
    user.first_name = ['first_name']
    user.last_name = ['last_name']
    user.email = ['email']
    user.password = ['password']
    user.save()
    validated_data['user'] = User.objects.get(id=user.id)
    return super(AgentSerializer, self).update(instance, validated_data)

'邮递员测试'

{“用户”:{ "用户名":"测试用户名", "first_name": "testfirstname", "last_name":"testlastname", "电子邮件":"test@test.com", “密码”:“秘密” }, “电话”:“1111”, "公司":"1"}

'邮递员结果'

"user": {
    "username": "['username']",
    "first_name": "['first_name']",
    "last_name": "['last_name']",
    "email": "['email']",
    "password": "['password']"
},
"phone": 1111,
"company": 1

我做错了什么?

【问题讨论】:

    标签: python django serialization django-rest-framework postman


    【解决方案1】:

    问题是,您将列表作为值分配给用户模型中的字段,而不是获取已验证数据的值。您需要替换它:

        user = validated_data.pop('user')
        user = instance.user
        user.username = ['username']
        user.first_name = ['first_name']
        user.last_name = ['last_name']
        user.email = ['email']
        user.password = ['password']
        user.save()
    

    与:

        validated_user = validated_data.pop('user')
        user = instance.user
        user.username = validated_user['username']
        user.first_name = validated_user['first_name']
        user.last_name = validated_user['last_name']
        user.email = validated_user['email']
        user.password = validated_user['password']
        user.save()
    

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2016-02-29
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多