update
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
# Generated by Django 5.2.7 on 2025-11-22 11:39
|
||||
# Generated by Django 5.2.7 on 2025-12-06 15:57
|
||||
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
@@ -8,27 +11,330 @@ class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('accounts', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Banner',
|
||||
name='AdTopPlanModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, unique=True, verbose_name='Plan Name')),
|
||||
('price', models.DecimalField(decimal_places=2, max_digits=10, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Price')),
|
||||
('duration', models.PositiveIntegerField(verbose_name='Duration (days)')),
|
||||
('description', models.TextField(blank=True, verbose_name='Description')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad Top Plan',
|
||||
'verbose_name_plural': 'Ad Top Plans',
|
||||
'db_table': 'ad_top_plan',
|
||||
'ordering': ['price'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BannerModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('title', models.CharField(max_length=255, verbose_name='Title')),
|
||||
('description', models.TextField(verbose_name='Description')),
|
||||
('mobile_image', models.ImageField(upload_to='banner/mobile_image/', verbose_name='Mobile Image')),
|
||||
('desktop_image', models.ImageField(upload_to='banner/desktop_image/', verbose_name='Desktop Image')),
|
||||
('mobile_image', models.ImageField(upload_to='banners/mobile/', verbose_name='Mobile Image')),
|
||||
('desktop_image', models.ImageField(upload_to='banners/desktop/', verbose_name='Desktop Image')),
|
||||
('link', models.URLField(verbose_name='Link')),
|
||||
('bg_color', models.CharField(max_length=255, verbose_name='BG Color')),
|
||||
('text_color', models.CharField(max_length=255, verbose_name='Text Color')),
|
||||
('bg_color', models.CharField(default='#FFFFFF', max_length=7, verbose_name='Background Color')),
|
||||
('text_color', models.CharField(default='#000000', max_length=7, verbose_name='Text Color')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
|
||||
('order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Banner',
|
||||
'verbose_name_plural': 'Banners',
|
||||
'db_table': 'banner',
|
||||
'ordering': ['order', '-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ColorModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, unique=True, verbose_name='Name')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Color',
|
||||
'verbose_name_plural': 'Colors',
|
||||
'db_table': 'color',
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TagsModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, unique=True, verbose_name='Tag Name')),
|
||||
('slug', models.SlugField(max_length=255, unique=True, verbose_name='Slug')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Tag',
|
||||
'verbose_name_plural': 'Tags',
|
||||
'db_table': 'tags',
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, verbose_name='Name')),
|
||||
('ad_type', models.CharField(choices=[('Buy', 'Buy'), ('Sell', 'Sell')], max_length=255, verbose_name='Type')),
|
||||
('ad_category_type', models.CharField(choices=[('Product', 'Product'), ('Service', 'Service'), ('Auto', 'Auto'), ('Home', 'Home')], max_length=255, verbose_name='Category Type')),
|
||||
('_price', models.DecimalField(blank=True, db_column='price', decimal_places=2, max_digits=10, null=True, verbose_name='Price')),
|
||||
('discount', models.DecimalField(decimal_places=2, default=-1, max_digits=10, verbose_name='Discount')),
|
||||
('is_available', models.BooleanField(default=True, verbose_name='Is available')),
|
||||
('physical_product', models.BooleanField(default=False, verbose_name='Physical product')),
|
||||
('image', models.ImageField(upload_to='ads/', verbose_name='Image')),
|
||||
('description', models.TextField(verbose_name='Description')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ads', to=settings.AUTH_USER_MODEL, verbose_name='User')),
|
||||
('plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.adtopplanmodel', verbose_name='Plan')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad',
|
||||
'verbose_name_plural': 'Ads',
|
||||
'db_table': 'ad',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdSizeModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('weight', models.PositiveIntegerField(verbose_name='Weight (g)')),
|
||||
('width', models.PositiveIntegerField(verbose_name='Width (cm)')),
|
||||
('height', models.PositiveIntegerField(verbose_name='Height (cm)')),
|
||||
('length', models.PositiveIntegerField(verbose_name='Length (cm)')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='size_info', to='api.admodel', verbose_name='Ad')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad Size',
|
||||
'verbose_name_plural': 'Ad Sizes',
|
||||
'db_table': 'ad_size',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdVariantModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('value', models.CharField(max_length=255, verbose_name='Value')),
|
||||
('is_available', models.BooleanField(default=True, verbose_name='Is Available')),
|
||||
('price', models.DecimalField(decimal_places=2, max_digits=10, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Price')),
|
||||
('stock_quantity', models.PositiveIntegerField(default=0, verbose_name='Stock Quantity')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='variants', to='api.admodel', verbose_name='Ad')),
|
||||
('color', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='api.colormodel', verbose_name='Color')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad Variant',
|
||||
'verbose_name_plural': 'Ad Variants',
|
||||
'db_table': 'ad_variant',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CategoryModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, verbose_name='Category Name')),
|
||||
('name_uz', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
|
||||
('name_ru', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
|
||||
('name_en', models.CharField(max_length=255, null=True, verbose_name='Category Name')),
|
||||
('show_home', models.BooleanField(default=False, verbose_name='Show on Home')),
|
||||
('level', models.IntegerField(default=0, editable=False, verbose_name='Level')),
|
||||
('image', models.ImageField(blank=True, null=True, upload_to='categories/', verbose_name='Image')),
|
||||
('category_type', models.CharField(choices=[('Product', 'Product'), ('Service', 'Service'), ('Auto', 'Auto'), ('Home', 'Home')], default='Product', max_length=255, verbose_name='Category Type')),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='api.categorymodel', verbose_name='Parent Category')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Category',
|
||||
'verbose_name_plural': 'Categories',
|
||||
'db_table': 'category',
|
||||
'ordering': ['level', 'name'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='admodel',
|
||||
name='category',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.categorymodel', verbose_name='Category'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FeedbackModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('star', models.IntegerField(default=5, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)], verbose_name='Rating')),
|
||||
('comment', models.TextField(max_length=1000, verbose_name='Comment')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feedbacks', to='api.admodel', verbose_name='Ad')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feedbacks', to=settings.AUTH_USER_MODEL, verbose_name='User')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Feedback',
|
||||
'verbose_name_plural': 'Feedbacks',
|
||||
'db_table': 'feedback',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FeedbackImageModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('image', models.ImageField(upload_to='feedbacks/', verbose_name='Image')),
|
||||
('feedback', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.feedbackmodel', verbose_name='Feedback')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Feedback Image',
|
||||
'verbose_name_plural': 'Feedback Images',
|
||||
'db_table': 'feedback_images',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrderModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('status', models.CharField(choices=[('Pending', 'Pending'), ('Cancel', 'Cancel'), ('Done', 'Done')], db_index=True, max_length=255, verbose_name='Status')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Total Amount')),
|
||||
('address', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='accounts.address', verbose_name='Address')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL, verbose_name='User')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Order',
|
||||
'verbose_name_plural': 'Orders',
|
||||
'db_table': 'order',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrderItemModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Price')),
|
||||
('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='api.admodel', verbose_name='Ad')),
|
||||
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='api.ordermodel', verbose_name='Order')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Order Item',
|
||||
'verbose_name_plural': 'Order Items',
|
||||
'db_table': 'order_item',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='admodel',
|
||||
name='tags',
|
||||
field=models.ManyToManyField(blank=True, to='api.tagsmodel', verbose_name='Tags'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdOptionModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=255, verbose_name='Name')),
|
||||
('value', models.CharField(max_length=255, verbose_name='Value')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='api.admodel', verbose_name='Ad')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad Option',
|
||||
'verbose_name_plural': 'Ad Options',
|
||||
'db_table': 'ad_option',
|
||||
'unique_together': {('ad', 'name')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdImageModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('image', models.ImageField(upload_to='ads/images/', verbose_name='Image')),
|
||||
('order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
|
||||
('is_primary', models.BooleanField(default=False, verbose_name='Is Primary')),
|
||||
('ad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.admodel', verbose_name='Ad')),
|
||||
('ad_variant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='images', to='api.advariantmodel', verbose_name='Ad Variant')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ad Image',
|
||||
'verbose_name_plural': 'Ad Images',
|
||||
'db_table': 'ad_images',
|
||||
'ordering': ['order', '-created_at'],
|
||||
'indexes': [models.Index(fields=['ad', 'is_primary'], name='ad_images_ad_id_ed2cb8_idx')],
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='categorymodel',
|
||||
index=models.Index(fields=['parent', 'show_home'], name='category_parent__ebe06e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='categorymodel',
|
||||
index=models.Index(fields=['level'], name='category_level_e67701_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='advariantmodel',
|
||||
index=models.Index(fields=['ad', 'is_available'], name='ad_variant_ad_id_3a5d5e_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='advariantmodel',
|
||||
unique_together={('ad', 'value')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='feedbackmodel',
|
||||
index=models.Index(fields=['ad', '-created_at'], name='feedback_ad_id_444d80_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='feedbackmodel',
|
||||
index=models.Index(fields=['user'], name='feedback_user_id_8cf53b_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='feedbackmodel',
|
||||
unique_together={('user', 'ad')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='ordermodel',
|
||||
index=models.Index(fields=['user', '-created_at'], name='order_user_id_13e363_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='ordermodel',
|
||||
index=models.Index(fields=['status'], name='order_status_35c31c_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='orderitemmodel',
|
||||
unique_together={('order', 'ad')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='admodel',
|
||||
index=models.Index(fields=['-created_at'], name='ad_created_359de0_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='admodel',
|
||||
index=models.Index(fields=['category', 'is_available'], name='ad_categor_8ff346_idx'),
|
||||
),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user