#django #django-rest-framework #django-serializer
#django #django-rest-framework #django-сериализатор
Вопрос:
У меня есть модели профилей, связанные с пользователем
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)
этот мой код ПОЛУЧАЕТ данные профиля и имя пользователя и фамилию, но ПОМЕЩАЕТ запрос только на обновление данных профиля, но не имени пользователя и фамилии (это обратное отношение) в чем причина?
Ответ №1:
Потому что вы сохраняете только модель профиля, а не пользователя. Вам нужно добавить instance.user.save()
после установки имени и фамилии.
Кроме того, если все, что вам нужно, это добавить одно поле, возможно, будет лучше наследовать от абстрактного пользователя вместо O2O. Вы можете прочитать больше здесь https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html если вам интересно