Добавить значения к данным сериализатора - PullRequest
1 голос
/ 31 января 2020

Я получаю некоторые кредитные карты клиентов из API. Данные не указывают карту клиента по умолчанию, хотя другой API может сделать это. Я хотел бы отфильтровать первый набор данных и добавить значение, указывающее, соответствует ли карта карте по умолчанию.

    customer = Customer.objects.get(subscriber=request.user.organization_id)
    default_payment_method = customer.default_payment_method.organization_id
    cards = PaymentMethod.objects.filter(customer=customer.djstripe_id)
    serializer = PaymentMethodSerializer(cards, many=True)

    # something like this, although I know this is not right
    for card in cards:
        if card.id == default_payment_method:
             set card.default=True

    return Response(cards)

Сейчас данные выглядят как

cards = [
         {"id":"pm_1G6u80AFXbZqlwaURe8swF23","billing_details":{"address":{"city":...}}},
         {"id":"pm_1G6u80AFXbZqlwaURe8swF23","billing_details":{"address":{"city":...}}}
         ...
        ]

Но я бы хотел, чтобы они выглядели так:

 cards = [
         {"id":"pm_1G6u80AFXbZqlwaURe8swF23","default": "True", "billing_details":{"address":{"city":...}}},
         {"id":"pm_1G6u80AFXbZqlwaURe8swF23","default": "False", "billing_details":{"address":{"city":...}}}
         ...
        ]

1 Ответ

1 голос
/ 31 января 2020

Вы можете сделать это или уровень сериализатора. Используйте SerializerMethodField:

class PaymentMethodSerializer(serializers.ModelSerializer):
    default = SerializerMethodField()

    class Meta:
        model = PaymentMethod

    def get_default(self, obj):
        return obj.id == self.context["default_payment_method"]

Обратите внимание, что для работы self.context["default_payment_method"] необходимо добавить default_payment_method в сериализатор context на ваш взгляд:

customer = Customer.objects.get(subscriber=request.user.organization_id)
default_payment_method = customer.default_payment_method.organization_id
cards = PaymentMethod.objects.filter(customer=customer.djstripe_id)
serializer = PaymentMethodSerializer(cards, many=True, context={'default_payment_method': default_payment_method})

return Response(serializer.data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...