# 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='Аватар пользователя' ) 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(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 self.groups.all().values('name') def get_user_permissions(self): """ Возвращает разрешения пользователя. """ return self.user_permissions.all().values('codename') def get_user_permissions_list(self): """ Возвращает список разрешений пользователя. """ return list(self.get_user_permissions().values_list('codename', flat=True)) def get_user_permissions_dict(self): """ Возвращает словарь с разрешениями пользователя. """ return {perm.codename: perm.name for perm in self.user_permissions.all()} def get_user_permissions_dict_list(self): """ Возвращает список словарей с разрешениями пользователя. """ return [{'codename': perm.codename, 'name': perm.name} for perm in self.user_permissions.all()]