Django 在充当另一个序列化程序类的序列化程序类中指定字段名';s场

Django 在充当另一个序列化程序类的序列化程序类中指定字段名';s场,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,假设下面的ModelSerializer类 class UserSongSerializer(serializers.ModelSerializer): user = serializers.SerializerMethodField() song_likes = serializers.ReadOnlyField() # This is model's property field song_shares = serializer

假设下面的
ModelSerializer

class UserSongSerializer(serializers.ModelSerializer):
    user            = serializers.SerializerMethodField()
    song_likes      = serializers.ReadOnlyField() # This is model's property field
    song_shares     = serializers.ReadOnlyField()
    song_plays      = serializers.ReadOnlyField()
    song_price      = serializers.ReadOnlyField()   
    genre           = GenreSerializer(many=True,required=False,context={'key':5})
    language        = LanguageSerializer(many=True, required=False)
传递特定的
context
kwarg,如下所示

genre           = GenreSerializer(many=True,required=False,context={'fields':['name']})
由于我想在某些特定情况下只检索
Genre
model类中的name字段,因此我重写了
GenreSerializer
class的
get\u fields\u name
方法,以便我仅在需要时通过上下文提及特定字段

class GenreSerializer(serializers.ModelSerializer):

    def get_field_names(self, *args, **kwargs):
        """
        Overriding ModelSerializer get_field_names method for getting only specific fields in serializer when mentioned in SerializerClass arguments
        """

        field_names = self.context.get('fields', None)
        if field_names:
            return field_names

        return super(GenreSerializer, self).get_field_names(*args, **kwargs)        

    class Meta:
        model = Genre
        fields = '__all__'
但是,我无法在重写的
get\u fields\u name
方法中获取任何“fields”(获取
None
)键。我知道其他方法,比如使用
StringRelatedField
,但这会将输出表示形式更改为

"genre":[
        "Pop",
        "Rock"
        ]
然而,我想坚持我原来的表述

"genre": [
                {
                    "id": 3,
                    "name": "Pop",
                    "created_date": "2018-09-05T17:05:59.705422+05:30",
                    "updated_date": "2018-09-20T14:43:02.062107+05:30",
                    "status": false
                },
                {
                    "id": 4,
                    "name": "Rock",
                    "created_date": "2018-09-05T17:06:06.889047+05:30",
                    "updated_date": "2018-09-17T16:45:22.684044+05:30",
                    "status": true
                },
                {
                    "id": 5,
                    "name": "Classical",
                    "created_date": "2018-09-05T17:06:14.216260+05:30",
                    "updated_date": "2018-09-05T17:06:14.275082+05:30",
                    "status": true
                }
            ]
更新-我想要的是这样

"genre": [
                {

                    "name": "Pop"

                },
                {

                    "name": "Rock"

                },
                {

                    "name": "Classical"

                }
            ]

上下文只能设置为根序列化程序

每当实例化
UserSongSerializer
时,它将覆盖嵌套的
类型
上下文

如果您使用的是泛型视图,则需要覆盖视图的
get\u serializer\u context
,并在其中添加您自己的上下文。记录在案

PS:上下文被序列化程序、字段和验证器“共享”


PPS:设置后不要更改上下文,这将是一种未定义的行为。

谢谢您的简明回答。您是否可以建议解决方案(使用FBV)。我不想手动
pop
UserSongSerializer(…)。数据
我不想要的字段