【问题标题】:Overriding the UserDetailsSerializer in django-rest-auth覆盖 django-rest-auth 中的 UserDetailsS​​erializer
【发布时间】:2018-12-21 10:31:35
【问题描述】:

我正在尝试使用自定义的用户详细信息修改 UserDetailsS​​erializer,但是当服务器运行时,它会抛出“'用户'对象没有属性'用户'”的错误。我尝试了很多方法,但都没有奏效。

我的代码是:

mode.py

class userProfileModel(models.Model):

GENDER = [
    ('', ""),
    ('M', "Male"),
    ('F', "Female")
]

user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE, default='')
age = models.DateField(auto_now_add=True)
gender = models.CharField(max_length=10, choices=GENDER, default='')
phone = models.IntegerField(default=0)
user_is_active = models.BooleanField(default=False)

def __str__(self):
    return self.user.username

还有serializers.py

from rest_auth.serializers import UserDetailsSerializer
from rest_framework import serializers

from .models import userProfileModel


class Profile(serializers.ModelSerializer):
    user = UserDetailsSerializer()
    class Meta:
        model = userProfileModel
        fields = ('user',)


class UserDetailsSerializer(UserDetailsSerializer):
    profile = Profile(many=True)

    class Meta(UserDetailsSerializer.Meta):
        fields = UserDetailsSerializer.Meta.fields + ('profile',)
        read_only_fields = ('',)

还有settings.py

REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'app.serializers.UserDetailsSerializer',
}

当我运行这段代码时,它会抛出这个错误。

尝试在序列化程序 UserDetailsSerializer 上获取字段 profile 的值时出现 AttributeError。 序列化程序字段可能命名不正确,并且与 User 实例上的任何属性或键都不匹配。 原始异常文本是:“用户”对象没有属性“配置文件”。

【问题讨论】:

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


    【解决方案1】:

    使用 source='userprofile' 作为

    class UserDetailsSerializer(UserDetailsSerializer):
        profile = Profile(source='userprofile')
    
        class Meta(UserDetailsSerializer.Meta):
            fields = UserDetailsSerializer.Meta.fields + ('profile',)
            read_only_fields = ('',)

    由于 UseruserProfileModelOneToOne 关系中,您不想指定 @987654325 @ 序列化程序中的参数

    【讨论】:

    • 我可以给你一个蛋糕给你可爱的答案吗?有效! :0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多