profile changes

This commit is contained in:
pacnpal
2024-11-05 23:36:50 +00:00
parent eb5d2acab5
commit 33b7c1a81a
47 changed files with 207 additions and 37 deletions

View File

@@ -3,6 +3,10 @@ from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
import random
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import base64
import os
def generate_random_id(model_class, id_field):
"""Generate a random ID starting at 4 digits, expanding to 5 if needed"""
@@ -36,8 +40,6 @@ class User(AbstractUser):
help_text='Unique identifier for this user that remains constant even if the username changes'
)
first_name = models.CharField(_('first name'), max_length=150, default='')
last_name = models.CharField(_('last name'), max_length=150, default='')
role = models.CharField(
max_length=10,
choices=Roles.choices,
@@ -61,8 +63,9 @@ class User(AbstractUser):
def get_display_name(self):
"""Get the user's display name, falling back to username if not set"""
if hasattr(self, 'profile') and self.profile.display_name:
return self.profile.display_name
profile = getattr(self, 'profile', None)
if profile and profile.display_name:
return profile.display_name
return self.username
def save(self, *args, **kwargs):
@@ -106,10 +109,21 @@ class UserProfile(models.Model):
flat_ride_credits = models.IntegerField(default=0)
water_ride_credits = models.IntegerField(default=0)
def get_avatar(self):
"""Return the avatar URL or serve a pre-generated avatar based on the first letter of the username"""
if self.avatar:
return self.avatar.url
first_letter = self.user.username[0].upper()
avatar_path = f"avatars/letters/{first_letter}_avatar.png"
if os.path.exists(avatar_path):
return f"/{avatar_path}"
return "/static/images/default-avatar.png"
def save(self, *args, **kwargs):
# If no display name is set, use the username
if not self.display_name:
self.display_name = self.user.username
if not self.profile_id:
self.profile_id = generate_random_id(UserProfile, 'profile_id')
super().save(*args, **kwargs)
@@ -155,7 +169,7 @@ class TopList(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='top_lists'
related_name='top_lists' # Added related_name for User model access
)
title = models.CharField(max_length=100)
category = models.CharField(
@@ -170,7 +184,7 @@ class TopList(models.Model):
ordering = ['-updated_at']
def __str__(self):
return f"{self.user.get_display_name()}'s {self.get_category_display()} Top List: {self.title}"
return f"{self.user.get_display_name()}'s {self.category} Top List: {self.title}"
class TopListItem(models.Model):
top_list = models.ForeignKey(