from django.contrib.auth.models import AbstractUser from django.db import models # Create your models here. class Plan(models.Model): name = models.CharField(max_length=255, unique=True) description = models.CharField(max_length=1024, null=True, blank=True) cost = models.IntegerField() product_id = models.UUIDField(null=True, blank=True) image = models.CharField(max_length=1024, null=True, blank=True) def __str__(self): return f"{self.name} (£{self.cost})" class User(AbstractUser): # Stripe customer ID stripe_id = models.CharField(max_length=255, null=True, blank=True) subscription_id = models.CharField(max_length=255, null=True, blank=True) subscription_active = models.BooleanField(null=True, blank=True) last_payment = models.DateTimeField(null=True, blank=True) paid = models.BooleanField(null=True, blank=True) plans = models.ManyToManyField(Plan, blank=True) def has_plan(self, plan): if not self.paid: # We can't have any plans if we haven't paid return False plan_list = [plan.name for plan in self.plans.all()] return plan in plan_list