我正在用Django建立博客网站。序列化后,Post模型具有Django内置User模型的外键字段,Post模型返回带有对User模型的整数外键引用,而我希望整个User对象数据而不是仅获取整数。Post 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)
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":"[email protected]"},
"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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句