from django.conf import settings from django.contrib.auth.models import Group from django.db import models class CoursePurchase(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) course = models.ForeignKey("home.CoursePage", on_delete=models.CASCADE) purchased_at = models.DateTimeField(auto_now_add=True) refunded = models.BooleanField(default=False) def mock_refund(self): self.refunded = True self.save() def save(self, *args, **kwargs): super().save(*args, **kwargs) group_name = f"course_{self.course.id}_access" group, _ = Group.objects.get_or_create(name=group_name) if self.refunded: print(f"Removing user {self.user} from group {group_name} due to refund") self.user.groups.remove(group)