Как сделать фильтрацию с помощью SerializerMethodField()?

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

Проблема в том, что я использую сериализаторы для фильтрации таблицы и chargeback не работает в ней. Как я могу сделать ее фильтруемой?

Упрощая код, у нас есть такая модель:

class PSerializer(serializers.ModelSerializer):
    ...
    chargeback = serializers.SerializerMethodField()

    def get_value(self, obj):
        ctransaction = CTransaction.objects.raw('SELECT * '
                                                   'FROM ctransaction '
                                                   'WHERE TRIM(mid)=TRIM(%s) '
                                                   'AND TRIM(unique_id)=TRIM(%s) '
                                                   'AND TRIM(num)=TRIM(%s) '
                                                   'AND rc_code IN (%s, %s, %s)',
                                                   [obj.mid, obj.unique_id, obj.num, '1', '1', '1'])
        if len(cs_transaction) > 0:
            return 'Yes'
        return 'No'

Если я правильно понял ваш вопрос, ваша проблема заключается в имени метода (get_value). вы должны изменить его на get_chargeback

class PSerializer(serializers.ModelSerializer):
    ...
    chargeback = serializers.SerializerMethodField()

    def get_chargeback(self, obj):
        ctransaction = CTransaction.objects.raw('SELECT * '
                                                   'FROM ctransaction '
                                                   'WHERE TRIM(mid)=TRIM(%s) '
                                                   'AND TRIM(unique_id)=TRIM(%s) '
                                                   'AND TRIM(num)=TRIM(%s) '
                                                   'AND rc_code IN (%s, %s, %s)',
                                                   [obj.mid, obj.unique_id, obj.num, '1', '1', '1'])
        if len(cs_transaction) > 0:
            return 'Yes'
        return 'No'
Вернуться на верх