невозможно обновить поля обратной связи в обновлении UpdateAPIView django rest - PullRequest
1 голос
/ 24 апреля 2019

У меня есть модели профиля, связанные с пользователем

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    stream_name = models.CharField(max_length=30, blank=True)

serializerr.py

class ProfileSerializer(serializers.ModelSerializer):
    first_name = serializers.SerializerMethodField()
    last_name = serializers.SerializerMethodField()

    def get_first_name(self, profile):
        return profile.user.first_name

    def get_last_name(self, profile):
        return profile.user.last_name

    class Meta:
        model = htu_models.Profile
        exclude = ('id', 'user')

view.py

class UserProfileChangeAPIView(generics.RetrieveAPIView, generics.UpdateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = api_serializers.ProfileSerializer
    # parser_classes = (MultiPartParser, FormParser,)

    def get_object(self):
        obj = get_object_or_404(User, email=self.request.user.email)
        return obj.profile

    # def put(self, request, *args, **kwargs):
    #     return self.update(request, *args, **kwargs)

    def update(self, request, *args, **kwargs):
        instance = self.get_object()
        instance.user.first_name = request.data.get("first_name")
        instance.user.last_name = request.data.get("last_name")
        instance.save()

        serializer = self.get_serializer(instance, data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        return Response(serializer.data)

это мой код GET данные профиля, имя и фамилия пользователя, но PUT запрашивать только обновление данных профиля, но не имя и фамилию пользователя (это обратное отношение) в чем причина?

1 Ответ

1 голос
/ 24 апреля 2019

Поскольку вы сохраняете только модель профиля, а не пользователя.Вам нужно добавить instance.user.save() после установки имени и фамилии.

Кроме того, если вам нужно только добавить одно поле, возможно, будет лучше наследовать от абстрактного пользователя, а не O2O.Вы можете прочитать больше здесь https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html, если вы заинтересованы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...