Django остальные рамки неверная вложенная сериализация - PullRequest
0 голосов
/ 22 апреля 2020

Я запустил новый django проект фреймворка отдыха и столкнулся с досадной проблемой. Вложенная сериализация не работает должным образом. Вместо сериализации моделей отношений и возврата сериализованного объекта он возвращает дополнительное поле «отношения» в дополнение к «атрибутам» по умолчанию json field.

Вот мой код python 3.6:

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)

Ответ, который я ожидаю получить:

{
        "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"
                    }
                }
            }
        }
    ]
}

В чем проблема и как я могу это исправить? Я скопировал этот код из моего предыдущего проекта, где все было в порядке. Спасибо всем заранее.

1 Ответ

0 голосов
/ 22 апреля 2020

Только что узнал, что совершил крайне глупую ошибку. Все, что мне нужно было сделать, чтобы получить правильный ответ, это просто заменить строку return Response(serializer.data) на строку return Response({'info': serializer.data}) внутри файла views.py .

...