【问题标题】:How to update user profile through Mixins in Django如何通过 Django 中的 Mixins 更新用户配置文件
【发布时间】:2015-09-08 15:41:12
【问题描述】:

需要使用mixins编辑user profile,通过向相应的url发送PUT请求(包含要更新信息的用户的id)

以下代码中缺少什么/需要更改以实现上述功能?

models.py

class UserProfile(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.OneToOneField(User)
    profile_picture = models.ImageField(upload_to='documents', blank=True)
    def __str__(self):
        return self.user.username

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username','password', 'first_name', 'last_name', 'email',)
        write_only_fields = ('password',)
        read_only_fields = ('is_staff', 'is_superuser', 'is_active', 'date_joined',)

        def restore_object(self, attrs, instance=None):
            user = super(UserSerializer, self).restore_object(attrs, instance)
            user.set_password(attrs['password'])
            return user

class UserProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = UserProfile
        fields = ('id','user','profile_picture',)

views.py

class UserMixin(object,):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer
    permission_classes = (IsOwnerOrReadOnly,)

class UserProfileView(UserMixin, RetrieveUpdateDestroyAPIView):
    pass

询问是否需要更清晰。

【问题讨论】:

  • 但是你的问题是什么?也许解释一下你用上面提到的代码得到了什么,以及完成所需任务缺少什么?
  • 首先,我的用户配置文件没有得到更新(没有任何错误失败)......其次,我怀疑如果我更新用户配置文件,它是否也会在用户模型中自动更新?

标签: django django-rest-framework mixins put updatemodel


【解决方案1】:

你可以使用ModelViewsets 来更新用户配置文件吗

class UserProfileViewViewSet(viewsets.ModelViewSet):
        queryset = UserProfile.objects.all()
        serializer_class = UserProfileSerializer
        permission_classes = (IsOwnerOrReadOnly,)

        def update(self, request, *args, **kwargs):
            user_profile = self.get_object()
            serializer = self.get_serializer(user_profile, data=request.data, partial=True)
            serializer.is_valid(raise_exception=True)
            self.perform_update(serializer)
            return Response(serializer.data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2013-03-15
    • 2022-01-02
    • 2016-11-20
    相关资源
    最近更新 更多