mod: модели (preliminary 05) + миграции
А) Валюта перенесена из TbSource в TbSeller
This commit is contained in:
@@ -309,16 +309,16 @@ class LabelAdmin(admin.ModelAdmin):
|
||||
|
||||
class SellerAdmin(admin.ModelAdmin):
|
||||
"""Админ для продавцов"""
|
||||
list_display = ('id', 's_seller', 'l_seller_type', 't_seller_created')
|
||||
list_filter = ('l_seller_type',)
|
||||
list_display = ('id', 's_seller', 'l_seller_type', 'l_seller_currency', 't_seller_created')
|
||||
list_filter = ('l_seller_type', 'l_seller_currency', )
|
||||
search_fields = ('s_seller',)
|
||||
readonly_fields = ('t_seller_created', 't_seller_updated')
|
||||
|
||||
|
||||
class SourceAdmin(admin.ModelAdmin):
|
||||
"""Админ для источников"""
|
||||
list_display = ('id', 's_source_name', 'k_source_to_seller', 'l_source_type', 'l_source_currency', 't_source_data')
|
||||
list_filter = ('l_source_type', 'l_source_currency', 't_source_data')
|
||||
list_display = ('id', 's_source_name', 'k_source_to_seller', 'l_source_type', 't_source_data')
|
||||
list_filter = ('l_source_type', 't_source_data')
|
||||
search_fields = ('s_source_name',)
|
||||
readonly_fields = ('t_source_created', 't_source_updated')
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 6.0.5 on 2026-06-12 12:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('frontend', '0002_remove_tboffer_k_offer_to_format_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='tbsource',
|
||||
name='l_source_currency',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tbseller',
|
||||
name='l_seller_currency',
|
||||
field=models.CharField(choices=[('rub', 'RUB: российский рубль'), ('usd', 'USD: американский доллар'), ('eur', 'EUR: евро'), ('amd', 'AMD: армянских драм'), ('try', 'TRY: турецкая лира'), ('jpy', 'JPY: японская иена'), ('gbp', 'GBP: британский фунт'), ('cny', 'CNY: китайский юань'), ('byn', 'BYN: белорусский рубль'), ('ton', 'TON: криптовалюта TON'), ('??', 'Other')], default='rub', help_text='В какой валюте указаны цены в этом источнике. Все офферы из этого источника будут в этой валюте.', max_length=3, verbose_name='Валюта источника'),
|
||||
),
|
||||
]
|
||||
@@ -105,6 +105,7 @@
|
||||
# ├──────────────────────┼──────────────────────────────────────────────────────
|
||||
# │ PK: id │ AutoField
|
||||
# │ s_seller │ Название (уникальный)
|
||||
# │ l_seller_currency │ (rub, usd, eur, ...)
|
||||
# │ l_seller_type │ Тип (seller, label, diy, crowdfunding, other)
|
||||
# │ k_seller_to_article │ 1:1 FK → TbArticle (content, SEO, slug)
|
||||
# │ t_seller_created │ Timestamp
|
||||
@@ -120,7 +121,6 @@
|
||||
# │ PK: id │ AutoField
|
||||
# │ k_source_to_seller │ FK → TbSeller [indexed]
|
||||
# │ l_source_type │ (excel, csv, url, other)
|
||||
# │ l_source_currency │ (rub, usd, eur, ...)
|
||||
# │ s_source_name │ Название источника
|
||||
# │ source_file │ FilerFileField
|
||||
# │ s_source_url │ URL источника
|
||||
@@ -747,6 +747,8 @@ class TbLabel(models.Model):
|
||||
|
||||
# ============================================================================
|
||||
# ПРОДАВЦЫ / МАГАЗИНЫ
|
||||
# - Валюта привязана к продавцу. Если у продавца несколько валют,
|
||||
# создаем несколько продавцов с разными валютами.
|
||||
# ============================================================================
|
||||
class TbSeller(models.Model):
|
||||
"""Продавец или магазин, который продаёт товары."""
|
||||
@@ -757,6 +759,19 @@ class TbSeller(models.Model):
|
||||
CROWD = 'crowd', 'Краудфандинг'
|
||||
OTHER = '???', 'Другое'
|
||||
|
||||
class Currency(models.TextChoices):
|
||||
RUB = 'rub', 'RUB: российский рубль'
|
||||
USD = 'usd', 'USD: американский доллар'
|
||||
EUR = 'eur', 'EUR: евро'
|
||||
AMD = 'amd', 'AMD: армянских драм'
|
||||
TRY = 'try', 'TRY: турецкая лира'
|
||||
JPY = 'jpy', 'JPY: японская иена'
|
||||
GBP = 'gbp', 'GBP: британский фунт'
|
||||
CNY = 'cny', 'CNY: китайский юань'
|
||||
BYN = 'byn', 'BYN: белорусский рубль'
|
||||
TON = 'ton', 'TON: криптовалюта TON'
|
||||
OTHER = '??', 'Other'
|
||||
|
||||
# Используем SmallAutoField для оптимизации (макс ~32k)
|
||||
# Продавцов обычно до 1000-10000, поэтому достаточно
|
||||
id = models.SmallAutoField(primary_key=True)
|
||||
@@ -768,6 +783,13 @@ class TbSeller(models.Model):
|
||||
help_text='Техническое название продавца или магазина. Например: <tt>Клюква Рекодс</tt>. Может совпадать'
|
||||
' с названием продавца, если лейбл сам реализует свои издания через сайт.',
|
||||
)
|
||||
l_seller_currency = models.CharField(
|
||||
max_length=3,
|
||||
choices=Currency.choices,
|
||||
default=Currency.RUB,
|
||||
verbose_name='Валюта источника',
|
||||
help_text='В какой валюте указаны цены в этом источнике. Все офферы из этого источника будут в этой валюте.',
|
||||
)
|
||||
k_seller_to_article = models.OneToOneField(
|
||||
TbArticle,
|
||||
on_delete=models.SET_NULL,
|
||||
@@ -1042,19 +1064,6 @@ class TbSource(models.Model):
|
||||
URL = 'url', 'URL страницы с данными (например, HTML-страница с каталогом товаров)'
|
||||
OTHER = '??', 'Другое'
|
||||
|
||||
class Currency(models.TextChoices):
|
||||
RUB = 'rub', 'RUB: российский рубль'
|
||||
USD = 'usd', 'USD: американский доллар'
|
||||
EUR = 'eur', 'EUR: евро'
|
||||
TRY = 'try', 'TRY: турецкая лира'
|
||||
AMD = 'amd', 'AMD: армянский драм'
|
||||
JPY = 'jpy', 'JPY: японская иена'
|
||||
GBP = 'gbp', 'GBP: британский фунт'
|
||||
CNY = 'cny', 'CNY: китайский юань'
|
||||
BYN = 'byn', 'BYN: белорусский рубль'
|
||||
TON = 'ton', 'TON: криптовалюта TON'
|
||||
OTHER = '??', 'Other'
|
||||
|
||||
# Используем SmallAutoField для оптимизации (макс ~32k)
|
||||
# Источников обычно до 1000, достаточно
|
||||
id = models.SmallAutoField(primary_key=True)
|
||||
@@ -1067,13 +1076,6 @@ class TbSource(models.Model):
|
||||
db_index=True, # Принудительно создаем индекс, т.к. SQLite их сам не создаст.
|
||||
verbose_name='Продавец',
|
||||
)
|
||||
l_source_currency = models.CharField(
|
||||
max_length=3,
|
||||
choices=Currency.choices,
|
||||
default=Currency.RUB,
|
||||
verbose_name='Валюта источника',
|
||||
help_text='В какой валюте указаны цены в этом источнике. Все офферы из этого источника будут в этой валюте.',
|
||||
)
|
||||
s_source_name = models.CharField(
|
||||
max_length=128,
|
||||
blank=True,
|
||||
|
||||
Reference in New Issue
Block a user