@witchyph

Почему Django rest framework неправильно отображает внутренний сериализатор?

Собственно проблема в том, что во вью мне выводит поле "relationship" вместо внутреннего сериализатора.
models.py

from django.db import models
from django.contrib.auth.models import User


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='User', null=True, blank=True)
    first_name = models.CharField('First name', max_length=50)
    last_name = models.CharField('Last name', max_length=50)
    phone_number = models.CharField('Phone number', max_length=15)
    activated = models.DateTimeField('Activated')

    def __str__(self):
        return f'<Profile {self.first_name.title()} {self.last_name.title()}>'


serializers.py


from rest_framework import serializers
from .models import Profile

from django.contrib.auth.models import User


class ProfileSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Profile
        fields = ('id', 'first_name', 'last_name', 'phone_number')


class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ('id', 'email', 'username', 'profile')


views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User

from .serializers import UserSerializer
from .models import Profile


class UserViews(APIView):
    def get(self, request, format=None):
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)


Ну и url само собой привязан. Когда я перехожу по api/v1/users/ я хочу получить profile поле в атрибутах как сериализованный объект, т.е. примерно следующее

{
    "data": [
        {
            "type": "UserViews",
            "id": "1",
            "attributes": {
                "email": "",
                "username": "admin",
                "profile": {
                     "id": 1,
                     "first_name": "name1",
                     "last_name": "name2",
                     "phone_number": "+79999999999",
                 }
            },
        }
    ]
}


Но получаю почему-то следующее:

{
    "data": [
        {
            "type": "UserViews",
            "id": "1",
            "attributes": {
                "email": "",
                "username": "admin"
            },
            "relationships": {
                "profile": {
                    "data": {
                        "type": "Profile",
                        "id": "1"
                    }
                }
            }
        }
    ]
}


Что мне исправить чтобы внутренний связанный объект возвращался правильно(как в примере)? Ведь насколько я знаю для сериализации же не обязательна привязка к view.
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы