Files
links/.history/backend/links/models_20250506185857.py
2025-05-06 20:44:33 +09:00

429 lines
15 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# links/models.py
from django.db import models
from django.conf import settings
class LinkGroup(models.Model):
"""
Группа ссылок, принадлежащая пользователю.
"""
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups', # чтобы не конфликтовать с auth.User.groups
help_text='Владелец группы ссылок'
)
title = models.CharField(
max_length=100,
help_text='Название группы'
)
order = models.PositiveIntegerField(
default=0,
help_text='Порядок сортировки'
)
image = models.ImageField(
upload_to='link_groups/',
null=True,
blank=True,
help_text='Изображение группы ссылок'
)
created_at = models.DateTimeField(
auto_now_add=True,
help_text='Дата и время создания'
)
updated_at = models.DateTimeField(
auto_now=True,
help_text='Дата и время последнего обновления'
)
is_active = models.BooleanField(
default=True,
help_text='Активность группы ссылок'
)
description = models.TextField(
blank=True,
help_text='Описание группы ссылок'
)
is_public = models.BooleanField(
default=False,
help_text='Публичная группа ссылок'
)
is_featured = models.BooleanField(
default=False,
help_text='Выделенная группа ссылок'
)
is_private = models.BooleanField(
default=False,
help_text='Закрытая группа ссылок'
)
is_password_protected = models.BooleanField(
default=False,
help_text='Группа ссылок защищена паролем'
)
password = models.CharField(
max_length=128,
blank=True,
help_text='Пароль для доступа к группе ссылок'
)
is_approved = models.BooleanField(
default=False,
help_text='Группа ссылок одобрена администратором'
)
is_rejected = models.BooleanField(
default=False,
help_text='Группа ссылок отклонена администратором'
)
is_deleted = models.BooleanField(
default=False,
help_text='Группа ссылок удалена'
)
is_archived = models.BooleanField(
default=False,
help_text='Группа ссылок архивирована'
)
is_scheduled = models.BooleanField(
default=False,
help_text='Группа ссылок запланирована на публикацию'
)
scheduled_at = models.DateTimeField(
null=True,
blank=True,
help_text='Дата и время запланированной публикации'
)
is_expired = models.BooleanField(
default=False,
help_text='Группа ссылок истекла'
)
expiration_date = models.DateTimeField(
null=True,
blank=True,
help_text='Дата и время истечения срока действия группы ссылок'
)
is_featured_on_homepage = models.BooleanField(
default=False,
help_text='Группа ссылок выделена на главной странице'
)
is_featured_on_profile = models.BooleanField(
default=False,
help_text='Группа ссылок выделена на профиле пользователя'
)
is_featured_on_category = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в категории'
)
is_featured_on_tag = models.BooleanField(
default=False,
help_text='Группа ссылок выделена по тегу'
)
is_featured_on_search = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в результатах поиска'
)
is_featured_on_related = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в связанных ссылках'
)
is_featured_on_recommended = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в рекомендуемых ссылках'
)
is_featured_on_popular = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в популярных ссылках'
)
is_featured_on_trending = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в трендовых ссылках'
)
is_featured_on_new = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в новых ссылках'
)
is_featured_on_top = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в верхних ссылках'
)
is_featured_on_bottom = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в нижних ссылках'
)
is_featured_on_sidebar = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в боковой панели'
)
is_featured_on_footer = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в нижнем колонтитуле'
)
is_featured_on_header = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в верхнем колонтитуле'
)
is_featured_on_banner = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в баннере'
)
is_featured_on_popup = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в всплывающем окне'
)
is_featured_on_modal = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в модальном окне'
)
is_featured_on_notification = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в уведомлении'
)
is_featured_on_alert = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в алерте'
)
is_featured_on_toast = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в тосте'
)
is_featured_on_snackbar = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в снэкбаре'
)
is_featured_on_tooltip = models.BooleanField(
default=False,
help_text='Группа ссылок выделена в тултипе'
)
class Meta:
ordering = ['order']
unique_together = ('owner', 'title')
def __str__(self):
return f"{self.owner.username} {self.title}"
class Link(models.Model):
"""
Отдельная ссылка внутри группы.
"""
group = models.ForeignKey(
LinkGroup,
on_delete=models.CASCADE,
related_name='images/links/',
help_text='Группа, к которой относится ссылка'
)
title = models.CharField(
max_length=200,
help_text='Текст ссылки'
)
url = models.URLField(
help_text='URL-адрес'
)
order = models.PositiveIntegerField(
default=0,
help_text='Порядок сортировки внутри группы'
)
is_active = models.BooleanField(
default=True,
help_text='Активность ссылки'
)
created_at = models.DateTimeField(
auto_now_add=True,
help_text='Дата и время создания'
)
updated_at = models.DateTimeField(
auto_now=True,
help_text='Дата и время последнего обновления'
)
image = models.ImageField(
upload_to='links/',
null=True,
blank=True,
help_text='Изображение ссылки'
)
description = models.TextField(
blank=True,
help_text='Описание ссылки'
)
is_public = models.BooleanField(
default=False,
help_text='Публичная ссылка'
)
is_featured = models.BooleanField(
default=False,
help_text='Выделенная ссылка'
)
is_private = models.BooleanField(
default=False,
help_text='Закрытая ссылка'
)
is_password_protected = models.BooleanField(
default=False,
help_text='Ссылка защищена паролем'
)
password = models.CharField(
max_length=128,
blank=True,
help_text='Пароль для доступа к ссылке'
)
is_approved = models.BooleanField(
default=False,
help_text='Ссылка одобрена администратором'
)
is_rejected = models.BooleanField(
default=False,
help_text='Ссылка отклонена администратором'
)
is_deleted = models.BooleanField(
default=False,
help_text='Ссылка удалена'
)
is_archived = models.BooleanField(
default=False,
help_text='Ссылка архивирована'
)
is_scheduled = models.BooleanField(
default=False,
help_text='Ссылка запланирована на публикацию'
)
scheduled_at = models.DateTimeField(
null=True,
blank=True,
help_text='Дата и время запланированной публикации'
)
is_expired = models.BooleanField(
default=False,
help_text='Ссылка истекла'
)
expiration_date = models.DateTimeField(
null=True,
blank=True,
help_text='Дата и время истечения срока действия ссылки'
)
is_featured_on_homepage = models.BooleanField(
default=False,
help_text='Ссылка выделена на главной странице'
)
is_featured_on_profile = models.BooleanField(
default=False,
help_text='Ссылка выделена на профиле пользователя'
)
is_featured_on_category = models.BooleanField(
default=False,
help_text='Ссылка выделена в категории'
)
is_featured_on_tag = models.BooleanField(
default=False,
help_text='Ссылка выделена по тегу'
)
is_featured_on_search = models.BooleanField(
default=False,
help_text='Ссылка выделена в результатах поиска'
)
is_featured_on_related = models.BooleanField(
default=False,
help_text='Ссылка выделена в связанных ссылках'
)
is_featured_on_recommended = models.BooleanField(
default=False,
help_text='Ссылка выделена в рекомендуемых ссылках'
)
is_featured_on_popular = models.BooleanField(
default=False,
help_text='Ссылка выделена в популярных ссылках'
)
is_featured_on_trending = models.BooleanField(
default=False,
help_text='Ссылка выделена в трендовых ссылках'
)
is_featured_on_new = models.BooleanField(
default=False,
help_text='Ссылка выделена в новых ссылках'
)
is_featured_on_top = models.BooleanField(
default=False,
help_text='Ссылка выделена в верхних ссылках'
)
is_featured_on_bottom = models.BooleanField(
default=False,
help_text='Ссылка выделена в нижних ссылках'
)
is_featured_on_sidebar = models.BooleanField(
default=False,
help_text='Ссылка выделена в боковой панели'
)
is_featured_on_footer = models.BooleanField(
default=False,
help_text='Ссылка выделена в нижнем колонтитуле'
)
is_featured_on_header = models.BooleanField(
default=False,
help_text='Ссылка выделена в верхнем колонтитуле'
)
is_featured_on_banner = models.BooleanField(
default=False,
help_text='Ссылка выделена в баннере'
)
is_featured_on_popup = models.BooleanField(
default=False,
help_text='Ссылка выделена в всплывающем окне'
)
is_featured_on_modal = models.BooleanField(
default=False,
help_text='Ссылка выделена в модальном окне'
)
is_featured_on_notification = models.BooleanField(
default=False,
help_text='Ссылка выделена в уведомлении'
)
is_featured_on_alert = models.BooleanField(
default=False,
help_text='Ссылка выделена в алерте'
)
is_featured_on_toast = models.BooleanField(
default=False,
help_text='Ссылка выделена в тосте'
)
is_featured_on_snackbar = models.BooleanField(
default=False,
help_text='Ссылка выделена в снэкбаре'
)
is_featured_on_tooltip = models.BooleanField(
default=False,
help_text='Ссылка выделена в тултипе'
)
is_featured_on_qr_code = models.BooleanField(
default=False,
help_text='Ссылка выделена в QR-коде'
)
class Meta:
ordering = ['order']
def __str__(self):
return self.title
def get_absolute_url(self):
"""
Возвращает абсолютный URL для доступа к ссылке.
"""
return self.url
def get_group(self):
"""
Возвращает группу, к которой принадлежит ссылка.
"""
return self.group
def get_owner(self):
"""
Возвращает владельца ссылки.
"""
return self.group.owner
def get_link_info(self):
"""
Возвращает словарь с информацией о ссылке.
"""
return {
'title': self.title,
'url': self.url,
'is_active': self.is_active,
'created_at': self.created_at,
'updated_at': self.updated_at
}