问题描述
我正在用 Django 构建博客站点。序列化后,Post 模型具有 Django 内置 User 模型的外键字段,Post 模型返回对 User 模型的整数外键引用,而我期望整个 User 对象数据而不是只获取整数。 Postmodels.py:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
author = models.ForeignKey(User,on_delete=models.CASCADE)
body = models.TextField()
created_at = models.DateTimeField(auto_Now_add=True)
updated_at = models.DateTimeField(auto_Now=True)
serializers.py:
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id','author','body','created_at')
model = Post
views.py:
from django.shortcuts import render
from rest_framework import generics
from .models import Post
from .serializers import PostSerializer
from .permissions import IsAuthorOrReadOnly
class PostList(generics.ListCreateAPIView):
serializer_class = PostSerializer
queryset = Post.objects.all().order_by('-created_at')#sorted by created_at descending
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
permission_classes = (IsAuthorOrReadOnly,)
serializer_class = PostSerializer
queryset = Post.objects.all()
我想要
{
"id": 15,"author": {"fisrt_name":"firstname","last_name":"namelast","username":"username1","email":"example@gamil.com"},"body": "hello world2","created_at": "2020-12-23T13:53:17.741635Z"
}
代替
{
"id": 15,"author": 21,"created_at": "2020-12-23T13:53:17.741635Z"
}
解决方法
你可以像这样制作你的用户序列化器:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [...] # put your fields instead of "..."
depth = 1
然后像这样使用嵌套序列化器:
class PostSerializer(serializers.ModelSerializer):
author = UserSerializer(many=false)
class Meta:
fields = ('id','body','created_at')
model = Post