mod: модели (draft 13) + музыкальные стили
This commit is contained in:
@@ -92,6 +92,51 @@ class TbImage(models.Model):
|
|||||||
verbose_name_plural = 'Изображения'
|
verbose_name_plural = 'Изображения'
|
||||||
ordering = ('-t_img_created', 'i_img_sort',)
|
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-вёрсту (теги, мнемоники, спецсимволы) для'
|
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(
|
i_article_views = models.IntegerField(
|
||||||
# Счетчик просмотров (включая просмотры артиста, итема/релиза/товара, лейбла и продавца)
|
# Счетчик просмотров (включая просмотры артиста, итема/релиза/товара, лейбла и продавца)
|
||||||
default=0,
|
default=0,
|
||||||
|
|||||||
Reference in New Issue
Block a user