feat: added product variants

This commit is contained in:
2026-07-23 11:37:37 +02:00
parent 5786c07077
commit 87405f31fa
22 changed files with 818 additions and 315 deletions
+19
View File
@@ -0,0 +1,19 @@
# Generated by Django 6.0.2 on 2026-07-23 08:50
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0004_alter_shopsettings_shared_secret_and_more'),
]
operations = [
migrations.AlterField(
model_name='order',
name='uuid',
field=models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID'),
),
]
@@ -0,0 +1,78 @@
# Generated by Django 6.0.2 on 2026-07-23 09:20
import django.db.models.deletion
from decimal import Decimal
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0005_alter_order_uuid'),
]
operations = [
migrations.CreateModel(
name='ProductAttribute',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32, unique=True, verbose_name='nombre')),
],
options={
'verbose_name': 'atributo de producto',
'verbose_name_plural': 'atributos de producto',
'ordering': ('name',),
},
),
migrations.AlterField(
model_name='productprice',
name='product',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='prices', to='shop.product', verbose_name='producto'),
),
migrations.CreateModel(
name='ProductAttributeValue',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('value', models.CharField(max_length=32, verbose_name='valor')),
('attribute', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='values', to='shop.productattribute', verbose_name='atributo')),
],
options={
'verbose_name': 'valor de atributo',
'verbose_name_plural': 'valores de atributo',
'ordering': ('attribute__name', 'value'),
'unique_together': {('attribute', 'value')},
},
),
migrations.CreateModel(
name='ProductVariant',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='fecha de creación')),
('last_modification_date', models.DateTimeField(auto_now=True, verbose_name='fecha de última modificación')),
('sku', models.CharField(max_length=64, unique=True, verbose_name='código de referencia')),
('stock', models.DecimalField(decimal_places=4, default=Decimal('0'), max_digits=13, verbose_name='stock')),
('attribute_values', models.ManyToManyField(blank=True, related_name='variants', to='shop.productattributevalue', verbose_name='valores de atributo')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='variants', to='shop.product', verbose_name='producto')),
],
options={
'verbose_name': 'variante de producto',
'verbose_name_plural': 'variantes de producto',
'ordering': ('product', 'sku'),
},
),
migrations.AddField(
model_name='cartitem',
name='variant',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cart_items', to='shop.productvariant', verbose_name='variante'),
),
migrations.AddField(
model_name='orderline',
name='variant',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='order_lines', to='shop.productvariant', verbose_name='variante'),
),
migrations.AddField(
model_name='productprice',
name='variant',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='prices', to='shop.productvariant', verbose_name='variante'),
),
]