from django.db import models from django.contrib.auth import get_user_model from django.db.models.signals import post_save from django.dispatch import receiver from accounts.models import GuestEmail User = get_user_model() class BillingProfileManager(models.Manager): def new_or_get(self, request): created = False obj = None guest_email_id = request.session.get("guest_email_id") if request.user.is_authenticated(): 'logged in user checkout' obj, created = self.model.objects.get_or_create( user=request.user, email=request.user.email ) elif guest_email_id is not None: 'guest user checkout' print(guest_email_id) guest_email_obj = GuestEmail.objects.get(id=guest_email_id) obj, created = self.model.objects.get_or_create( email=guest_email_obj.email ) else: pass return obj, created class BillingProfile(models.Model): user = models.ForeignKey(User, unique=True, null=True, blank=True) email = models.EmailField() active = models.BooleanField(default=True) time = models.DateTimeField(auto_now_add=True) update = models.DateTimeField(auto_now_add=True) objects = BillingProfileManager() def __str__(self): return self.email @receiver(post_save, sender=User) def user_create(sender, instance, created, *args, **kwargs): if created: BillingProfile.objects.get_or_create(user=instance)