【问题标题】:Serializer not passing complete information to API view序列化程序未将完整信息传递给 API 视图
【发布时间】:2020-11-07 20:40:44
【问题描述】:

我创建了一个序列化程序,下面的“用户”来自我导入的另一个序列化程序,现在导入的序列化程序(PubliceProfileSerializer)可以自己正常工作,但是当我将其称为我的浏览器时它不显示 USER 的内容序列化器。除用户外,所有其他项目都显示。请帮忙

from rest_framework import serializers
from users.api.serializers import PublicProfileSerializer
from blog.models import Post

class PostSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='users.profile', read_only=True) 
    category = serializers.SerializerMethodField()
    label = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = '__all__'
    
    def get_category(self, obj):
        return obj.get_category_display()

    def get_label(self, obj):
        return obj.get_label_display() 

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    将您的序列化程序添加到字段列表中。替换

    fields = '__all__'
    

    fields = ('id', 'user', 'category', 'label')  
    

    因为:

    fields = '__all__'
    

    只会从 Post 模型中填充 idcategorylabel,但不会提供嵌套的用户序列化程序,因此它变为:

    class Meta:
        model = Post
        fields = ('id', 'user', 'category', 'label')  
    

    class PostSerializer(serializers.ModelSerializer):
        user = PublicProfileSerializer(many=False, 
                                       source='users.profile', 
                                       read_only=True) 
        category = serializers.SerializerMethodField()
        label = serializers.SerializerMethodField()
    
        class Meta:
            model = Post
            fields = ('id', 'user', 'category', 'label')
    
        def get_category(self, obj):
            return obj.get_category_display()
    
        def get_label(self, obj):
            return obj.get_label_display() 
    

    【讨论】:

    • [ { "id": 47, "category": "Music", "label": "PopSocial" }, { "id": 42, "category": "Food", "label ": "PopSocial" }, { "id": 43, "category": "Food", "label": "PopSocial" } ] ..... 这就是我所得到的,我没有看到那里的“用户”
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2015-03-30
    • 2013-10-19
    • 2016-10-03
    • 2019-07-25
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多