62 lines
2.1 KiB
Python
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() |