微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 模型序列化只返回外键的主键

如何解决Django 模型序列化只返回外键的主键

我正在用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。