У меня есть сохраненная функция в PostgreSQl. Я хочу вызвать эту функцию через django и подключиться с помощью обычного запроса (согласно таблице PayrPaymentSource
). Как это сделать?
Функция:
CREATE OR REPLACE FUNCTION select_cards()
RETURNS TABLE(payer_id bigint , source_details jsonb) AS $$
SELECT payer_id as payer_id, source_details as source_details FROM "processing"."payer_payment_source" WHERE payment_type_id = 'bank_card_details';
$$ LANGUAGE sql;
views.py query
paymentsss = Transaction.objects.all().select_related('currency',
'payment_source__payment_type',
'deal__service__contractor')
models.py
class PayerPaymentSource(models.Model):
id = models.BigIntegerField(blank=True, null=False, primary_key=True)
payer_id = models.BigIntegerField(blank=True, null=True)
payment_type = models.ForeignKey(PaymentType, max_length=64, blank=True, null=True, on_delete=models.CASCADE)
source_details = models.TextField(blank=True, null=True) # This field type is a guess.
class Meta:
managed = False
db_table = '"processing"."payer_payment_source"'
class Transaction(models.Model):
id = models.BigIntegerField(blank=True, null=False, primary_key=True)
currency = models.ForeignKey(Currency, null=True, on_delete=models.CASCADE)
deal = models.ForeignKey(Deal, null=True, on_delete=models.CASCADE)
# service_instance = models.ForeignKey(ServiceInstance, null=True, on_delete=models.CASCADE)
payment_source = models.ForeignKey(PayerPaymentSource, null=True, on_delete=models.CASCADE)
payment_date = models.DateTimeField(blank=True, null=True)
amount = models.IntegerField(blank=True, null=True)
status = models.CharField(max_length=255, blank=True, null=True)
context = models.TextField(blank=True, null=True)
UPD: я получил эту ошибку (функция не существует):

Сэтот запрос:
paymentsss = Transaction.objects.all().select_related('currency'
'payment_source__payment_type',
'deal__service__contractor',
).annotate(result=Func(function='select_cards', output_field=models.BigIntegerField()))