【问题标题】:Django model serialization returns only primary key for foreign keyDjango 模型序列化只返回外键的主键
【发布时间】:2021-05-04 05:05:42
【问题描述】:

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

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,
        "body": "hello world2",
        "created_at": "2020-12-23T13:53:17.741635Z"
    }

【问题讨论】:

    标签: python django serialization django-rest-framework foreign-keys


    【解决方案1】:

    你可以像这样制作你的用户序列化器:

    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
    

    【讨论】:

    • 欢迎您 :) 如果有效,请接受我的回答
    猜你喜欢
    • 2011-04-30
    • 2020-02-08
    • 2016-04-02
    • 1970-01-01
    • 2018-07-02
    • 2021-01-26
    • 2018-01-10
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多