Сериализатор не передает полную информацию в представление API

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Я создал сериализатор, который «пользователь» ниже, из другого сериализатора, который я импортировал, теперь импортированный сериализатор (PubliceProfileSerializer) отлично работает сам по себе, но он не отображает содержимое ПОЛЬЗОВАТЕЛЯ, когда я вызываю его своим браузером из этого сериализатора. Отображается любой другой элемент, кроме пользователя. Пожалуйста, помогите

 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() 
  

Ответ №1:

Добавьте ваш сериализатор в список полей. Заменить

 fields = '__all__'
  

с

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

потому что:

 fields = '__all__'
  

будет только заполняться id category и label из модели Post, но не будет предоставлять вложенный пользовательский сериализатор, поэтому он становится:

 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() 
  

Комментарии:

1. [ { «id»: 47, «category»: «Музыка», «label»: «PopSocial» }, { «id»: 42, «category»: «Еда», «label»: «PopSocial» }, { «id»: 43, «category»:»Еда», «ярлык»: «PopSocial» } ] ….. это все, что я получаю, я не вижу там «пользователя»