Django rest framework добавить поле в сериализатор, которое добавляется не к каждой записи - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь добавить данные в сериализатор, но у меня возникают проблемы при получении, чтобы добавить поле к ответу только один раз вместо каждой записи.

Вот мой код:

class FriendGiftSerializer(ModelSerializer):
    giftDisplayData = AllGiftSerializer(source='giftId', required=True)
    bestMatch = serializers.IntegerField()
    topAttribute = serializers.SerializerMethodField()

    class Meta:
        model = FriendGift
        fields = ('giftId', 'giftDisplayData', 'bestMatch', 'topAttribute')

    def get_topAttribute(self, obj):
        return self.context["top_attribute"]

И поле topAttribute добавляется к каждому экземпляру FriendGift, а не только один раз в конце.Я чувствую, что упускаю что-то маленькое, но у меня проблемы с поиском подходящего ресурса для решения этой проблемы.Ценю помощь!

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018
def get_topAttribute(self, obj):
    return self.context.pop("top_attribute", None)

Или

def get_topAttribute(self, obj):
    if not self.context.get('is_showed'):
        self.context['is_showed'] = True
        return self.context["top_attribute"]
    return None

Я думаю, что это немного сложно.

0 голосов
/ 19 ноября 2018

вам нужно создать контекст и передать его в Serializer следующим образом:

context_obj = {'top_attribute': 'example'}

serializer = FriendGiftSerializer(instance=query_set, many=True, context=context_obj)
return serializer.data

, и вы можете получить self.context["top_attribute"] внутри.

...