Django:'collections.OrderedDict' 对象不可调用

时间:2021-03-28 01:03:34

标签: python django django-models django-rest-framework

我正在尝试向使用序列化程序 UserSerializer 继承 AbstractUser 的模块 User 发出发布请求,但我收到错误“collections.OrderedDict”对象在现场“PhoneNumber”上不可调用。 序列化器:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model= User
        fields="__all__"
    def save(self, **kwargs):
        user = User(
            username = self.validated_data.get('username'),
            first_name =self.validated_data.get('first_name'),
            last_name = self.validated_data.get('last_name'),
             email=self.validated_data.get('email'),
            Address=self.validated_data.get('Address'),
            PhoneNumber=self.validated_data('PhoneNumber'))
        user.save()

用户模型:

class User(AbstractUser):
    Address=models.TextField(blank=True,null=True)
    PhoneNumber = models.CharField(max_length=15, blank=True,verbose_name='PhoneNumber')
    cdNumber = models.CharField(max_length=16, blank=True,verbose_name='cdNumber')
    cdDate=models.DateField(blank=True,null=True,verbose_name='cdDate')
    cdName = models.CharField(max_length=16, blank=True,verbose_name='cdName')
    def __str__(self):
        return self.first_name+" "+self.last_name

1 个答案:

答案 0 :(得分:0)

这个

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model= User
        fields="__all__"
    def save(self, **kwargs):
        user = User(
            username = self.validated_data.get('username'),
            first_name =self.validated_data.get('first_name'),
            last_name = self.validated_data.get('last_name'),
            email=self.validated_data.get('email'),
            Address=self.validated_data.get('Address'),
@@@
-           PhoneNumber=self.validated_data('PhoneNumber'))
===
+           PhoneNumber=self.validated_data.get('PhoneNumber'))
@@@
        user.save()

PS:我强烈建议使用pythonic snake_cased 字段名称而不是通常用于类型的PascalCased 字段名称。

或者尝试至少为每个类使用单一命名约定..因为这不是很受欢迎:

            last_name = self.validated_data.get('last_name'),
            PhoneNumber=self.validated_data.get('Address'),

您可以在 PEP8

中找到更多代码风格建议