Как сделать фильтрацию с помощью 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'