Django update "extended user profile" model field from webhook paramater
I am getting a webhook from our billing processor after a user makes a payment. So far I have successfully saved the webhook in models for record keeping. However, now I need to update the User account_paid field to the appropriate status.
I believe I've outlined the steps properly but I am stuck on implementing the code. How do I update account_paid and make sure it's the right user ID?
#@require_POST def webhook(request): template_name = 'payment/index.html' hook = Webhook() hook.user = request.GET.get('clientAccnum') hook.clientSubacc = request.GET.get('clientSubacc') hook.eventType = request.GET.get('eventType') hook.eventGroupType = request.GET.get('eventGroupType') hook.subscriptionId = request.GET.get('subscriptionId') hook.timestamp = request.GET.get('timestamp') hook.timestamplocal = timezone.now() hook.save() print (hook.user, hook.clientSubacc, hook.timestamplocal) if hook.eventType == 'RenewalSuccess': #Update user account_level to Paid Account Profile.account_paid.update(True) else: #Update user account_level to Free Profile.account_paid.update(False)
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) bio = models.TextField(max_length=500, blank=True) birth_date = models.DateField(null=True, blank=True) account_level = models.BooleanField(default=False)
There are no error messages yet because I'm trying to figure out the structure right now. The goal is to finish this question with a working solution.
*Side note: I know webhooks are delivered to URL as POST but for now I am using get purely for debugging purposes.
The Profile model has a OneToOne relationship with User, so you can simply say:
hook.save() hook.user.profile.account_paid = hook.eventType == 'RenewalSuccess' hook.user.profile.save()