Как я могу получить данные о вошедшем пользователе из разных Mdels в качестве аргументов

Я пытаюсь интегрировать платежную систему в мой Django проект и у меня есть модели для профиля и поданной заявки. Проблема в том, что мне нужна ситуация, когда пользователь нажимает на кнопку оплаты, система должна проверить, подал ли он/она заявку, и если да, то получить имя пользователя, email, телефон, сумму и передать их в качестве аргументов в представление process_payment, где будет производиться оплата.

вот код для модели Profile:

class Profile(models.Model):
    applicant = models.OneToOneField(User, on_delete=models.CASCADE, null = True)
    surname = models.CharField(max_length=10, null=True)
    othernames = models.CharField(max_length=30, null=True)
    gender = models.CharField(max_length=6, choices=GENDER, blank=True, null=True)
    nation = models.CharField(max_length=255, choices=NATION, blank=True, null=True)
    state = models.CharField(max_length=20, null=True)
    address = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=16, null=True)
    image = models.ImageField(default='avatar.jpg', upload_to ='profile_images')

вот код для модели стипендии:

class Submitted(models.Model):
   applicant = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
   application = models.UUIDField(primary_key = True, editable = False, default=uuid.uuid4)
   confirm = models.BooleanField()
   approved = models.CharField(max_length=20, null=True)
   date = models.DateTimeField(auto_now_add=True)

def save(self, *args, **kwargs):
     self.application == str(uuid.uuid4())
     super().save(*args, **kwargs)

def __unicode__(self):
    return self.applicant

def __str__(self):
    return f'Application Number: {self.application}-{self.applicant}'

Вот мой код представления:

@login_required(login_url='user-login')
def scholarship_detail(request, pk):
    data = Scholarship.objects.get(id=pk)

    if request.method=='POST':
    
    
    
        applicant=  request.user
        email = 'henry@gmail.com'
        amount = 2
        phone = 8034567
        return redirect(str(process_payment(applicant,email,amount,phone)))
    
        
   else:
      form = PaymentForm()

  ctx={
    'scholarship':data
  }
  return render(request, 'user/scholarship.html', ctx)

Как можно эффективно реализовать эту логику, потому что в моей пробной версии process_payment() отсутствуют 3 необходимых позиционных аргумента: 'email', 'сумма' и 'телефон'. Спасибо за ответ

Вам следует добавить параметры process_payment в словарь(контекст) и вернуть process_payment. тогда все остальные операции будут происходить внутри process_payment

@login_required(login_url='user-login')
def scholarship_detail(request, pk):
    data = Scholarship.objects.get(id=pk)

    if request.method=='POST':
    
    
    
        applicant=  request.user
        email = 'henry@gmail.com'
        amount = 2
        phone = 8034567
        context = {'applicant':applicant, 'email':email, 'amount':amount, phone} # Add to context. this will grab all the details into `process_payment` view
        return process_payment(request, context)
    
        
   else:
      form = PaymentForm()

  ctx={
    'scholarship':data
  }
  return render(request, 'user/scholarship.html', ctx)

process_payment вид или функция будут выглядеть следующим образом:

def process_payment(request, newContext={}):
   print(newContext)
   # Process the payment here 
   return render(request, 'payment.html', newContext)

Это должно помочь, но дайте мне знать, если у вас есть еще вопросы

Вернуться на верх