38827-vm/core/models.py
Flatlogic Bot d702332e91 v1
2026-02-28 04:54:16 +00:00

62 lines
2.1 KiB
Python

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 Profile(models.Model):
LOCATION_CHOICES = [
('Canley', 'Canley'),
('Leamington Spa', 'Leamington Spa'),
('On-Campus', 'On-Campus'),
('Coventry', 'Coventry'),
('Other', 'Other'),
]
LOOKING_FOR_CHOICES = [
('Friends', 'Friends'),
('Short-term', 'Short-term'),
('Long-term', 'Long-term'),
]
YEAR_CHOICES = [
('Year 1', 'Year 1'),
('Year 2', 'Year 2'),
('Year 3', 'Year 3'),
('Year 4+', 'Year 4+'),
('Postgraduate', 'Postgraduate'),
]
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
course = models.CharField(max_length=255, blank=True)
year = models.CharField(max_length=50, choices=YEAR_CHOICES, blank=True)
location = models.CharField(max_length=50, choices=LOCATION_CHOICES, blank=True)
looking_for = models.CharField(max_length=50, choices=LOOKING_FOR_CHOICES, blank=True)
bio = models.TextField(max_length=500, blank=True)
is_subscribed = models.BooleanField(default=False)
last_online = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.user.username}'s profile"
@property
def primary_photo(self):
primary = self.photos.filter(is_primary=True).first()
if primary:
return primary
return self.photos.first()
class Photo(models.Model):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='photos')
image = models.ImageField(upload_to='profile_photos/')
is_primary = models.BooleanField(default=False)
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Photo for {self.profile.user.username}"
@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()