Я запустил новый 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"
}
}
}
}
]
}
В чем проблема и как я могу это исправить? Я скопировал этот код из моего предыдущего проекта, где все было в порядке. Спасибо всем заранее.