繁体   English   中英

Django:从用户序列化程序获取用户配置文件

[英]Django: Get User profile from User serializer

我有一个基本的UserProfile ,有一个模型OneToOne有关系User模型。

我的 User 序列化程序运行良好,但如何从相同的序列化程序和viewset检索相关的UserProfile模型?

这是我的用户配置文件模型:

class UserProfile(models.Model):
    bio = models.CharField(max_length=1000)
    cellphone = PhoneNumberField(null=True)
    useraccount = models.OneToOneField(User, on_delete=models.CASCADE)

我当前的视图集:

class CurrentUserViewSet(viewsets.ReadOnlyModelViewSet):
    serializer_class = CurrentUserSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        user = self.request.user
        queryset = User.objects.filter(username = user)
        return queryset

我的用户序列化程序:

class CurrentUserSerializer(serializers.ModelSerializer):
    groups = GroupSerializer(many=True)
    
    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name', 'groups')

    def to_representation(self, instance):

        return {
            'username': instance.username,
            'email': instance.email,
            'first_name': instance.first_name,
            'last_name': instance.last_name,
            'groups':  GroupSerializer(instance.groups.all(), many=True).data,
        }

我尝试使用序列化程序执行以下操作,但出现属性错误,指出我的用户模型没有字段profile

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('dashboards', 'fullname')

class CurrentUserSerializer(serializers.ModelSerializer):
    groups = GroupSerializer(many=True)
    profile = TeamMemberDashboardSerializer()
    
    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name', 'groups', 'profile')

    def to_representation(self, instance):

        return {
            'username': instance.username,
            'email': instance.email,
            'first_name': instance.first_name,
            'last_name': instance.last_name,
            'groups':  GroupSerializer(instance.groups.all(), many=True).data,
            'profile': instance.profile
        }

谢谢你的时间!

最简单的方法是放置,用于显示配置文件数据是将depth = 1放入序列化程序的class Meta中,如下所示:

class CurrentUserSerializer(serializers.ModelSerializer):
    groups = GroupSerializer(many=True)
    
    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name', 'groups')
        depth = 1 

    def to_representation(self, instance):

        return {
            'username': instance.username,
            'email': instance.email,
            'first_name': instance.first_name,
            'last_name': instance.last_name,
            'groups':  GroupSerializer(instance.groups.all(), many=True).data,
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM