python - Django 模型序列化只返回外键的主键
问题描述
我正在用 Django 构建博客网站。序列化后,具有 Django 内置 User 模型的外键字段的 Post 模型,Post 模型返回对 User 模型的整数外键引用,而我期望整个 User 对象数据而不是仅获取整数。帖子models.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)
序列化程序.py:
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id', 'author','body','created_at')
model = Post
意见.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,
"body": "hello world2",
"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
推荐阅读
- javascript - 将自定义滚动条 CSS 分配给 div 而不是 body
- python - Python Pandas:如何为删除的数据制作标签?
- angular - 如何从 Angular 中的 Route Guards 传递布尔参数
- android - 如何将 Android 设备用作 BLE(低功耗蓝牙)
- apache-flink - 如何在 Flink Web UI 中上传 python 文件?
- python - Python tkinter - 单选按钮,如何根据用户选择多次更改结果?
- amazon-web-services - 如何检测 AWS Amplify 客户端与服务器端的断开连接?
- javascript - Javascript构造函数创建与先前创建的对象具有相同值的新对象
- command - GNU APL 行编辑器(∇-editor)支持哪些编辑命令?
- javascript - 基于特定数据的 Firebase 实时数据库规则