Я не могу запустить функцию с уровня обслуживания в Django

#python #django #function

Вопрос:

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

Я написал функцию, которая отлично работает в консоли, НО Я НЕ ЗНАЮ, КАК ЗАПУСТИТЬ ЭТУ ФУНКЦИЮ, ЧТОБЫ ОНА РАБОТАЛА АВТОМАТИЧЕСКИ. Идеальным вариантом для меня было бы, если бы, когда нужные мне данные появятся в таблице PayPal, функция IPN автоматически запустилась и выполнила необходимые мне действия.

Например, когда эти условия отображаются в таблице:

 ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by("-pk")[:20]
 

моя функция запустится, обойдет данные в таблице и выполнит необходимые мне действия.

Я пробовал такие методы:

 def Check_1():
if ipn.exists():
    return Subscription()

def Check_2():
if ipn.count() > 0:
    return Subscription()

def Check_3():
if len(ipn) > 0:
    return Subscription()
 

С консоли запускается функция подписки (), которая работает хорошо. Но когда я пишу это в документе Python (на уровне сервиса), ничего не работает. Я не знаю, как всем этим управлять.

Я даже не знаю, как запустить эту функцию из класса на листе views.py

Вот как я попытался запустить функцию подписки() с листа views.py :

     class Successful_payment(ListView):
        model = Odin
        template_name = "successful_payment.html"
        context_object_name = 'successful_payment'

       ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by("-pk")[:20]

        if len(ipn) > 0:
            Subscription()
 

В результате функция работает только при перезапуске сервера. При вызове одной и той же страницы «successful_payment.html» функция не вызывается и не выполняется.

Вот сама функция:

 def Subscription():
for z in ipn:
    user_z = User.objects.get(id=(int(z.custom)))
        if z.payment_gross == 25:
            user_z.paid_until = plus_days(count='monthly')
            user_z.save()
        z.save()
 

Я нашел решение этой проблемы. решена проблема с помощью функции get_context_data:

     def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    ipn = PayPalIPN.objects.filter(payment_status='Completed').order_by(
    "-pk")[:20]
    Podpiska(ipn)
    return context
 

Комментарии:

1. Прочитайте документы: docs.djangoproject.com/en/3.2/ref/class-based-views/generic-display/#listview 🤦