mod: модели (draft 13) + музыкальные стили

This commit is contained in:
2026-06-03 20:32:01 +03:00
parent b2154e815e
commit fd70a44c81

View File

@@ -92,6 +92,51 @@ class TbImage(models.Model):
verbose_name_plural = 'Изображения'
ordering = ('-t_img_created', 'i_img_sort',)
# ============================================================================
# МУЗЫКАЛЬНЫЕ СТИЛИ
# ============================================================================
class TbMusicStyle(models.Model):
"""
Музыкальный стиль (канонический / опорный).
Один главный стиль может иметь несколько синонимов (из Discogs).
Пример:
- Главный: "Rock"
- Синонимы: ["rock", "Rock Music", "Rock & Roll", "Hard Rock", ...]
"""
s_style_name = models.CharField(
max_length=100,
unique=True,
db_index=True,
verbose_name='Стиль (канонический)',
help_text='Основное название стиля. Например: "Rock", "Jazz", "Classical"',
)
s_style_slug = models.SlugField(
max_length=100,
unique=True,
db_index=True,
verbose_name='Слаг',
)
j_style_synonyms = models.JSONField(
default=list,
blank=True,
verbose_name='Синонимы из источников',
help_text='Список вариантов названия из Discogs, MusicBrainz и т.д. (для матчинга)'
'Пример: ["rock", "Rock Music", "Rock & Roll", "Hard Rock"]',
)
t_style_created = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
t_style_updated = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
def __str__(self):
return f"style: {self.s_style_slug} ({self.s_style_name})"
class Meta:
verbose_name = 'Музыкальный стиль'
verbose_name_plural = 'Музыкальные стили'
ordering = ('-i_style_popularity', 's_style_name')
# ============================================================================
# СТАТЬИ (любая текстовая информация о релизе, исполнителе, продавце и т.д...
# а так же новости, блог, тексты о спец-предложениях и т.д.)
@@ -184,6 +229,14 @@ class TbArticle(models.Model):
help_text='Полный текст статьи. Может содержать HTML-вёрсту (теги, мнемоники, спецсимволы) для'
' типографирования.',
)
k_article_to_styles = models.ManyToManyField(
TbMusicStyle,
blank=True,
related_name='style_to_article',
db_index=True,
verbose_name='Музыкальные стили',
help_text='Стили этой статьи/артиста/релиза (Rock, Jazz, Classical, ...)',
)
i_article_views = models.IntegerField(
# Счетчик просмотров (включая просмотры артиста, итема/релиза/товара, лейбла и продавца)
default=0,