from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver import uuid class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') referral_code = models.CharField(max_length=20, unique=True, blank=True) points = models.IntegerField(default=0) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.user.username}'s Profile" def save(self, *args, **kwargs): if not self.referral_code: self.referral_code = str(uuid.uuid4()).replace('-', '')[:8].upper() super().save(*args, **kwargs) @receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) @receiver(post_save, sender=User) def save_user_profile(sender, instance, **kwargs): instance.profile.save()