From a700a1c7e67aec33d44b5ab5f4a39772b23d96b0 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 18 Oct 2025 22:41:43 +0300 Subject: [PATCH] Features: 1) Update `attribute.name` and its localized variants to remove the `unique` constraint and set `null=True` for optional fields; Fixes: 1) Correct field attributes in `attribute` model to align with database requirements; Extra: 1) Generated migration file `0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py`. --- ...ame_alter_attribute_name_ar_ar_and_more.py | 302 ++++++++++++++++++ core/models.py | 1 - 2 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py diff --git a/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py new file mode 100644 index 00000000..d6bbce0d --- /dev/null +++ b/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py @@ -0,0 +1,302 @@ +# Generated by Django 5.2 on 2025-10-18 19:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0045_alter_product_name_alter_product_name_ar_ar_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="attribute", + name="name", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ar_ar", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_cs_cz", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_da_dk", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_de_de", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_gb", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_en_us", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_es_es", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_fa_ir", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_fr_fr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_he_il", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_hi_in", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_hr_hr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_id_id", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_it_it", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ja_jp", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_kk_kz", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ko_kr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_nl_nl", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_no_no", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pl_pl", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_pt_br", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ro_ro", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_ru_ru", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_sv_se", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_th_th", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_tr_tr", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_vi_vn", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + migrations.AlterField( + model_name="attribute", + name="name_zh_hans", + field=models.CharField( + help_text="name of this attribute", + max_length=255, + null=True, + verbose_name="attribute's name", + ), + ), + ] diff --git a/core/models.py b/core/models.py index 6b4b0811..63e00571 100644 --- a/core/models.py +++ b/core/models.py @@ -652,7 +652,6 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig max_length=255, help_text=_("name of this attribute"), verbose_name=_("attribute's name"), - unique=True, ) is_filterable = BooleanField(