# users/models.py from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): """ Пользовательская модель, расширяющая стандартную AbstractUser. """ full_name = models.CharField( max_length=150, blank=True, help_text='Полное имя пользователя' ) bio = models.TextField( blank=True, help_text='Краткая биография пользователя' ) avatar = models.ImageField( upload_to='avatars/', null=True, blank=True, help_text='Аватар пользователя' ) cover = models.ImageField( upload_to='avatars/covers/', null=True, blank=True, ) def __str__(self): return self.username def get_full_name(self): """ Возвращает полное имя пользователя. """ return self.full_name if self.full_name else self.username def get_short_name(self): """ Возвращает короткое имя пользователя. """ return self.username def get_bio(self): """ Возвращает биографию пользователя. """ return self.bio if self.bio else "Нет информации о пользователе" def get_avatar(self): """ Возвращает URL аватара пользователя. """ return self.avatar.url if self.avatar else None def get_user_info(self): """ Возвращает словарь с информацией о пользователе. """ return { 'username': self.username, 'full_name': self.get_full_name(), 'bio': self.get_bio(), 'avatar': self.get_avatar() } def get_user_links(self): """ Возвращает список ссылок пользователя. """ from links.models import Link return Link.objects.filter(group__owner=self).values('title', 'url') def get_user_design(self): """ Возвращает настройки дизайна пользователя. """ from customization.models import DesignSettings try: design = DesignSettings.objects.get(user=self) return { 'theme_color': design.theme_color, 'background_image': design.background_image.url if design.background_image else None, 'font_family': design.font_family, 'custom_css': design.custom_css } except DesignSettings.DoesNotExist: return None def get_user_groups(self): """ Возвращает группы пользователя. """ return list(self.link_groups.values('title', 'order')) def get_user_permissions(self): """ Возвращает разрешения пользователя. """ return list(self.user_permissions.values_list('codename', flat=True))