mod: модели (19) добавлены поля j_article_metadata и i_article_sort для статей + расширен список ArticleType
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
# Generated by Django 6.0.5 on 2026-08-03 19:55
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import filer.fields.image
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('frontend', '0004_alter_tbarticle_k_article_to_image_and_more'),
|
||||||
|
migrations.swappable_dependency(settings.FILER_IMAGE_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='tboffer',
|
||||||
|
name='s_offer_skip32',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tbarticle',
|
||||||
|
name='i_article_sort',
|
||||||
|
field=models.IntegerField(db_index=True, default=0, help_text='Сортировка/Приоритет для HUB. Статьи-хабы (и, возможно, обычные статьи) будут сортироваться в первую очередь по этому полю. Чем меньше число, тем выше приоритет. Используется для формирования меню, навигации, разделов и т.д.', verbose_name='Приоритет'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tbarticle',
|
||||||
|
name='j_article_metadata',
|
||||||
|
field=models.JSONField(blank=True, default=dict, help_text='JSON с дополнительными данными статьи. Может быть понадобится. Например, можно хранить информацию об источнике данных, авторе статьи, ссылках на внешние ресурсы, историю переименований slug и т.д.', null=True, verbose_name='Метаданные статьи'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tbarticle',
|
||||||
|
name='k_article_to_image',
|
||||||
|
field=filer.fields.image.FilerImageField(blank=True, help_text='Обложка или иллюстрация статьи из файлового хранилища (django_filer). Для получения метаданных: TbImageMetadata.objects.filter(k_image_to_image=article.k_article_to_image).<br/><b>ВАЖНО</b>: Так как статья привязывается к исполнителям, лейблам, продавцам, музыкальным стилям, её изображение можно использовать как логотип, пиктограмму или баннер этих сущностей. Рекомендуется использовать прозрачный фон (движок поддерживает SVG, WebP и PNG).', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image_to_article', to=settings.FILER_IMAGE_MODEL, verbose_name='Изображение для статьи'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tbarticle',
|
||||||
|
name='l_article_type',
|
||||||
|
field=models.CharField(blank=True, choices=[('artist', 'Artis: артист, группа или бренд'), ('style', 'Slyle: музыкальный стиль'), ('item', 'Item: Альбом, релиз или товар (кассета, hifi, аксессуар)'), ('label', 'Label: Лейбл, издатель или компания'), ('offer', 'Offer: конкретное предложение от продавца'), ('seller', 'Seller: продавец или магазин'), ('blog', 'Новость или блог'), ('action', 'Спецпредложение, акция, распродажа и т.д.'), ('adv', 'Реклама или баннер'), ('HUB', 'СТАТЬЯ-ХАБ (использует DSL для отображения контента)'), ('txt', 'Текстовый контент (для условий конфиденциальности, правил, соглашений и т.д.)'), ('other', 'Другое')], db_index=True, default='other', max_length=7, verbose_name='Тип статьи'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# LPON Store — Django E-Commerce Database Schema (SQLite optimized)
|
# LPON Store — Django E-Commerce Database Schema (SQLite optimized)
|
||||||
#
|
|
||||||
# ER-ДИАГРАММА СХЕМЫ БД (v2.0 - переделана правильно!)
|
# ER-ДИАГРАММА СХЕМЫ БД (v2.0 - переделана правильно!)
|
||||||
#
|
#
|
||||||
# Легенда:
|
# Легенда:
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
#
|
#
|
||||||
# TbArticle (текстовый контент и SEO):
|
# TbArticle (текстовый контент и SEO):
|
||||||
# id, s_article_title (уникальный), l_article_type, b_article_published
|
# id, s_article_title (уникальный), l_article_type, b_article_published
|
||||||
# s_article_title_html, k_article_to_image (→filer.Image)
|
# s_article_title_html, k_article_to_image (→filer.Image), i_article_sort, j_article_metadata (JSON)
|
||||||
# k_article_to_styles (M2M→TbMusicStyle), i_article_views, i_article_favorites
|
# k_article_to_styles (M2M→TbMusicStyle), i_article_views, i_article_favorites
|
||||||
# slug (уникальный, для URL), seo_title, seo_description, s_article_teaser_html
|
# slug (уникальный, для URL), seo_title, seo_description, s_article_teaser_html
|
||||||
# s_article_content_html, t_article_started, t_article_ended, t_article_created, t_article_updated
|
# s_article_content_html, t_article_started, t_article_ended, t_article_created, t_article_updated
|
||||||
@@ -327,9 +326,10 @@ class TbArticle(models.Model):
|
|||||||
SELLER = 'seller', 'Seller: продавец или магазин'
|
SELLER = 'seller', 'Seller: продавец или магазин'
|
||||||
BLOG = 'blog', 'Новость или блог'
|
BLOG = 'blog', 'Новость или блог'
|
||||||
ACTION = 'action', 'Спецпредложение, акция, распродажа и т.д.'
|
ACTION = 'action', 'Спецпредложение, акция, распродажа и т.д.'
|
||||||
TO_MAIN = 'to_main', 'Текст/Блок для главной страницы'
|
|
||||||
ADV = 'adv', 'Реклама или баннер'
|
ADV = 'adv', 'Реклама или баннер'
|
||||||
OTHER = '???', 'Другое'
|
HUB = 'HUB', 'СТАТЬЯ-ХАБ (использует DSL для отображения контента)'
|
||||||
|
TXT = 'txt', 'Текстовый контент (для условий конфиденциальности, правил, соглашений и т.д.)'
|
||||||
|
OTHER = '?¿?', 'Другое'
|
||||||
|
|
||||||
s_article_title = models.CharField(
|
s_article_title = models.CharField(
|
||||||
max_length=255,
|
max_length=255,
|
||||||
@@ -368,6 +368,14 @@ class TbArticle(models.Model):
|
|||||||
' Если не указано, статья будет отображаться всегда (или до тех пор, пока не будет удалена '
|
' Если не указано, статья будет отображаться всегда (или до тех пор, пока не будет удалена '
|
||||||
' или снята с публикации через `b_article_published`)',
|
' или снята с публикации через `b_article_published`)',
|
||||||
)
|
)
|
||||||
|
i_article_sort = models.IntegerField(
|
||||||
|
default=0,
|
||||||
|
db_index=True,
|
||||||
|
verbose_name='Приоритет',
|
||||||
|
help_text='Сортировка/Приоритет для HUB. Статьи-хабы (и, возможно, обычные статьи) будут сортироваться'
|
||||||
|
' в первую очередь по этому полю. Чем меньше число, тем выше приоритет. Используется для'
|
||||||
|
' формирования меню, навигации, разделов и т.д.'
|
||||||
|
)
|
||||||
s_article_title_html = models.CharField(
|
s_article_title_html = models.CharField(
|
||||||
max_length=255,
|
max_length=255,
|
||||||
blank=True,
|
blank=True,
|
||||||
@@ -428,6 +436,14 @@ class TbArticle(models.Model):
|
|||||||
db_index=True,
|
db_index=True,
|
||||||
verbose_name='Слаг статьи',
|
verbose_name='Слаг статьи',
|
||||||
)
|
)
|
||||||
|
j_article_metadata = models.JSONField(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
default=dict,
|
||||||
|
verbose_name='Метаданные статьи',
|
||||||
|
help_text='JSON с дополнительными данными статьи. Может быть понадобится. Например, можно хранить информацию'
|
||||||
|
' об источнике данных, авторе статьи, ссылках на внешние ресурсы, историю переименований slug и т.д.',
|
||||||
|
)
|
||||||
seo_title = models.CharField(
|
seo_title = models.CharField(
|
||||||
max_length=255,
|
max_length=255,
|
||||||
blank=True,
|
blank=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user