thejagstudio's picture
Upload 353 files
9798ee2
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
class UserProfile(models.Model):
GENDER_CHOICES = (
('male', 'Male'),
('female', 'Female'),
('other', 'Other'),
('prefer-not-to-say', 'Prefer not to say'),
)
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
phone_number = models.CharField(max_length=20, blank=True, null=True)
date_of_birth = models.DateField(blank=True, null=True)
gender = models.CharField(max_length=20, choices=GENDER_CHOICES, default='prefer-not-to-say')
avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
bio = models.TextField(blank=True, null=True)
@property
def total_requests(self):
"""Dynamically count user's photo requests."""
return self.user.photo_requests.count()
@property
def photos_found(self):
"""Dynamically count total photos found across all requests."""
total = 0
for request in self.user.photo_requests.filter(status='completed'):
if request.found_photos:
total += len(request.found_photos)
return total
def __str__(self):
return f"{self.user.username}'s Profile"
class SupportRequest(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='support_requests')
subject = models.CharField(max_length=255)
message = models.TextField()
status = models.CharField(max_length=20, default='open', choices=(
('open', 'Open'),
('in_progress', 'In Progress'),
('resolved', 'Resolved'),
('closed', 'Closed'),
))
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.user.username} - {self.subject} ({self.status})"
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
UserProfile.objects.get_or_create(user=instance)
instance.profile.save()