refactor(db): update cursor rules and enhance deployment rollback script
- Standardized string formatting in cursor rules for consistency. - Added a new rollback deployment script to facilitate blue-green deployment strategy. - Removed outdated seed data files and introduced new rarity mappings for better data management. - Improved model relationships and query optimizations in various views and admin configurations. - Enhanced caching strategies across templates to improve performance and reduce load times, including jitter in cache settings for better performance. - Refactored card-related views and templates to utilize new model fields and relationships.
This commit is contained in:
parent
39a002e394
commit
af2f48a491
37 changed files with 2444 additions and 13565 deletions
|
|
@ -1,6 +1,8 @@
|
|||
# Generated by Django 5.1 on 2025-05-10 01:22
|
||||
# Generated by Django 5.1 on 2025-06-15 03:44
|
||||
|
||||
import django.db.models.deletion
|
||||
import parler.fields
|
||||
import parler.models
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
|
|
@ -8,64 +10,733 @@ class Migration(migrations.Migration):
|
|||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Card',
|
||||
name="Ability",
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('cardset', models.CharField(max_length=32)),
|
||||
('cardnum', models.IntegerField()),
|
||||
('style', models.CharField(max_length=128)),
|
||||
('rarity_icon', models.CharField(max_length=12)),
|
||||
('rarity_level', models.IntegerField()),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Ability",
|
||||
"verbose_name_plural": "Abilities",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Deck',
|
||||
name="Attack",
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('hex_color', models.CharField(max_length=9)),
|
||||
('cardset', models.CharField(max_length=8)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
(
|
||||
"damage",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="Damage string, e.g., '40', '20x', '80+'.",
|
||||
max_length=10,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Attack",
|
||||
"verbose_name_plural": "Attacks",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CardNameTranslation',
|
||||
name="CardSet",
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('language', models.CharField(max_length=64)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('card', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='name_translations', to='cards.card')),
|
||||
(
|
||||
"id",
|
||||
models.CharField(
|
||||
help_text="The ID for the set, e.g., 'A1', 'A1a'.",
|
||||
max_length=3,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"file_name",
|
||||
models.CharField(
|
||||
help_text="Original name of the JSON file, e.g., 'a1-genetic-apex.json'.",
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card Set",
|
||||
"verbose_name_plural": "Card Sets",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CardType",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card Type",
|
||||
"verbose_name_plural": "Card Types",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Energy",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Energy",
|
||||
"verbose_name_plural": "Energies",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Rarity",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
("icon", models.CharField(max_length=12)),
|
||||
("level", models.PositiveIntegerField()),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Rarity",
|
||||
"verbose_name_plural": "Rarities",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="RarityMapping",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
(
|
||||
"original_name",
|
||||
models.CharField(
|
||||
help_text="The rarity name as it appears in the import source (e.g., JSON file).",
|
||||
max_length=255,
|
||||
unique=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"mapped_name",
|
||||
models.CharField(
|
||||
help_text="The standardized rarity name to use in the system.",
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
(
|
||||
"icon",
|
||||
models.CharField(
|
||||
help_text="The icon associated with this rarity.", max_length=12
|
||||
),
|
||||
),
|
||||
(
|
||||
"level",
|
||||
models.PositiveIntegerField(
|
||||
help_text="The level or order of this rarity."
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Rarity Mapping",
|
||||
"verbose_name_plural": "Rarity Mappings",
|
||||
"ordering": ["original_name"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AttackCost",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"quantity",
|
||||
models.PositiveIntegerField(
|
||||
default=1,
|
||||
help_text="Quantity of this energy type required for the attack.",
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
(
|
||||
"attack",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to="cards.attack"
|
||||
),
|
||||
),
|
||||
(
|
||||
"energy",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to="cards.energy"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Attack Cost",
|
||||
"verbose_name_plural": "Attack Costs",
|
||||
"unique_together": {("attack", "energy")},
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='card',
|
||||
name='decks',
|
||||
field=models.ManyToManyField(to='cards.deck'),
|
||||
model_name="attack",
|
||||
name="energy_cost",
|
||||
field=models.ManyToManyField(
|
||||
related_name="attacks", through="cards.AttackCost", to="cards.energy"
|
||||
),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DeckNameTranslation',
|
||||
name="Pack",
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('language', models.CharField(max_length=64)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('deck', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='name_translations', to='cards.deck')),
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
("hex_color", models.CharField(max_length=9)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
(
|
||||
"cardset",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="packs",
|
||||
to="cards.cardset",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Pack",
|
||||
"verbose_name_plural": "Packs",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='card',
|
||||
unique_together={('cardset', 'cardnum')},
|
||||
migrations.CreateModel(
|
||||
name="Card",
|
||||
fields=[
|
||||
("cardnum", models.AutoField(primary_key=True, serialize=False)),
|
||||
(
|
||||
"id",
|
||||
models.CharField(
|
||||
db_index=True,
|
||||
help_text="The unique ID from the JSON source, cardset-cardnum (e.g., 'a1-001').",
|
||||
max_length=10,
|
||||
),
|
||||
),
|
||||
(
|
||||
"checksum",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
db_index=True,
|
||||
help_text="SHA256 checksum of the card data.",
|
||||
max_length=64,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"health",
|
||||
models.PositiveIntegerField(
|
||||
blank=True, help_text="HP of the Pokémon.", null=True
|
||||
),
|
||||
),
|
||||
(
|
||||
"retreat_cost",
|
||||
models.PositiveIntegerField(
|
||||
blank=True,
|
||||
help_text="The number of retreat cost for the card.",
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"style",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="Inline CSS style for the card, used for dynamic styling.",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("deleted_at", models.DateTimeField(blank=True, null=True)),
|
||||
(
|
||||
"abilities",
|
||||
models.ManyToManyField(
|
||||
blank=True, related_name="cards", to="cards.ability"
|
||||
),
|
||||
),
|
||||
(
|
||||
"attacks",
|
||||
models.ManyToManyField(related_name="cards", to="cards.attack"),
|
||||
),
|
||||
(
|
||||
"cardset",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="cards",
|
||||
to="cards.cardset",
|
||||
),
|
||||
),
|
||||
(
|
||||
"card_type",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="cards",
|
||||
to="cards.cardtype",
|
||||
),
|
||||
),
|
||||
(
|
||||
"pkmn_type",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="cards_pkmn_type",
|
||||
to="cards.energy",
|
||||
),
|
||||
),
|
||||
(
|
||||
"weakness_type",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="cards_weakness_type",
|
||||
to="cards.energy",
|
||||
),
|
||||
),
|
||||
(
|
||||
"packs",
|
||||
models.ManyToManyField(related_name="cards", to="cards.pack"),
|
||||
),
|
||||
(
|
||||
"rarity",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="cards",
|
||||
to="cards.rarity",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card",
|
||||
"verbose_name_plural": "Cards",
|
||||
},
|
||||
bases=(parler.models.TranslatableModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AbilityTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The name of the ability.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"effect",
|
||||
models.TextField(help_text="Description of the ability's effect."),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.ability",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Ability Translation",
|
||||
"db_table": "cards_ability_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AttackTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The name of the attack.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"effect",
|
||||
models.TextField(help_text="Description of the attack's effect."),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.attack",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Attack Translation",
|
||||
"db_table": "cards_attack_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CardSetTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The full name of the set, e.g., 'Genetic Apex'.",
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.cardset",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card Set Translation",
|
||||
"db_table": "cards_cardset_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CardTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(help_text="The name of the card.", max_length=32),
|
||||
),
|
||||
(
|
||||
"evolves_from_name",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="Name of the Pokémon this card evolves from.",
|
||||
max_length=32,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.card",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card Translation",
|
||||
"db_table": "cards_card_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CardTypeTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The name of the card type.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"subtype",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="The subtype of the card type.",
|
||||
max_length=32,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.cardtype",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Card Type Translation",
|
||||
"db_table": "cards_cardtype_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="EnergyTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The name of the energy.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.energy",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Energy Translation",
|
||||
"db_table": "cards_energy_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="PackTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"full_name",
|
||||
models.CharField(
|
||||
help_text="The full name of the pack, e.g., 'Genetic Apex: Mewtwo'.",
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The pack name itself, e.g., 'Mewtwo'.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.pack",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Pack Translation",
|
||||
"db_table": "cards_pack_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="RarityTranslation",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"language_code",
|
||||
models.CharField(
|
||||
db_index=True, max_length=15, verbose_name="Language"
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
help_text="The name of the rarity.", max_length=32
|
||||
),
|
||||
),
|
||||
(
|
||||
"master",
|
||||
parler.fields.TranslationsForeignKey(
|
||||
editable=False,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="translations",
|
||||
to="cards.rarity",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Rarity Translation",
|
||||
"db_table": "cards_rarity_translation",
|
||||
"db_tablespace": "",
|
||||
"managed": True,
|
||||
"default_permissions": (),
|
||||
"unique_together": {("language_code", "master")},
|
||||
},
|
||||
bases=(parler.models.TranslatedFieldsModelMixin, models.Model),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue