Конечная точка DRF возвращает странно сериализованный объект, хотя в представлении он получен правильно

Итак, я использую Django REST auth и dj-rest-auth в качестве бэкенда аутентификации для моего приложения React. В представлении кажется, что он захватывает правильный экземпляр вошедшего пользователя, но это не отражается в ответе. Также если я печатаю поля этого экземпляра, он возвращает неправильные данные, однако экземпляр сериализатора выглядит так, как будто он содержит правильный объект для сериализации... хм

# views.py

class UserDetail(APIView):
    """
    Retrieve a User instance
    """
    def get(self, request):
        print('Header Token: ' + str(request.META['HTTP_AUTHORIZATION']))
        print('request.user: ' + str(request.user))
        try:
            user_profile = UserProfile(user=request.user)
            print('user_profile: ' + str(user_profile))
            print('user_profile.company: ' + str(user_profile.company)). # Why is this none?
            serializer = UserProfileSerializer(user_profile)
            print('serializer: ' + str(serializer)) # looks like the instance is correct though..
            print('serializer.data: ' + str(serializer.data))
            return Response(serializer.data)
        except UserProfile.DoesNotExist:
            raise Http404

Возвращается

enter image description here

И почтальон возвращается

https://i.stack.imgur.com/vzkZ2.png

Но данные должны быть:

enter image description here

# models.py

class UserProfile(models.Model):
    """
    Extends Base User via 1-1 for profile information
    """
    # Relations
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True)

    # Roles
    is_ta = models.BooleanField(default=False)  # indicates if user is part of TA department

    def __str__(self):
        return F'{self.user.first_name} {self.user.last_name}'


@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)
    instance.userprofile.save()
# serializers.py

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = '__all__'

Вы неправильно получаете экземпляр UserProfile, вместо:

user_profile = UserProfile(user=request.user)

try:

user_profile = UserProfile.objects.get(user=request.user)

UPD: Для создания вложенного представления либо установите атрибут depth в Meta вашего сериализатора:

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = '__all__'
        depth = 1

или создайте отдельный сериализатор для связанных полей, например:

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = your_fields

и установить сериализатор как поле:

class UserProfileSerializer(serializers.ModelSerializer):
    company = CompanySerializer()

    class Meta:
        model = UserProfile
        fields = '__all__'
Вернуться на верх