Spaces:
Sleeping
Sleeping
| 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) | |
| def total_requests(self): | |
| """Dynamically count user's photo requests.""" | |
| return self.user.photo_requests.count() | |
| 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})" | |
| def create_user_profile(sender, instance, created, **kwargs): | |
| if created: | |
| UserProfile.objects.create(user=instance) | |
| def save_user_profile(sender, instance, **kwargs): | |
| UserProfile.objects.get_or_create(user=instance) | |
| instance.profile.save() | |