rebuild of detail of product

This commit is contained in:
Parsa Nazer
2025-04-22 20:54:20 +03:30
parent 50f5d19aa3
commit c79a5ee1ca
6 changed files with 89 additions and 20 deletions
+10 -1
View File
@@ -119,6 +119,14 @@ class DetailModelAdmin(ModelAdmin, ImportExportModelAdmin):
"widget": ArrayWidget,
}
}
class DetailInLine(StackedInline):
model = DetailModel
extra = 0
show_change_link = True
min_num = 1
max_num = 4
@admin.register(ProductDetailModel)
class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin):
import_form_class = ImportForm
@@ -126,7 +134,8 @@ class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin):
search_fields = ['detail_category__title', 'name']
compressed_fields = True
warn_unsaved_form = True
autocomplete_fields = ['detail_category',]
inlines = [DetailInLine]
formfield_overrides = {
ArrayField: {
"widget": ArrayWidget,
@@ -0,0 +1,19 @@
# Generated by Django 5.1.2 on 2025-04-22 16:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('product', '0037_productdetailmodel_name'),
]
operations = [
migrations.AddField(
model_name='detailmodel',
name='name',
field=models.CharField(default='', help_text='این فیلد فقط برای راحتی در استفاده و جست و جو در پنل ادمین میباشد و در وبسایت نمایش نخواهد داده شد', max_length=50, verbose_name='نام چزيیات'),
preserve_default=False,
),
]
@@ -0,0 +1,24 @@
# Generated by Django 5.1.2 on 2025-04-22 17:02
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('product', '0038_detailmodel_name'),
]
operations = [
migrations.RemoveField(
model_name='productdetailmodel',
name='detail',
),
migrations.AddField(
model_name='detailmodel',
name='detail_model',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='product.productdetailmodel', verbose_name='دسته بندی جزيات'),
preserve_default=False,
),
]
@@ -0,0 +1,17 @@
# Generated by Django 5.1.2 on 2025-04-22 17:04
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('product', '0039_remove_productdetailmodel_detail_and_more'),
]
operations = [
migrations.RemoveField(
model_name='detailmodel',
name='name',
),
]
+16 -16
View File
@@ -129,18 +129,6 @@ class ProductModel(models.Model):
class DetailModel(models.Model):
title = models.CharField(max_length=50, verbose_name='عنوان')
detail_text1 = models.CharField(max_length=150 , verbose_name='متن جزیات ۱')
detail_text2 = models.CharField(max_length=150 , verbose_name='متن جزیات ۲', blank=True, null=True)
detail_text3 = models.CharField(max_length=150 , verbose_name='متن جزیات ۳', blank=True, null=True)
detail_text4 = models.CharField(max_length=150 , verbose_name='متن جزیات ۴', blank=True, null=True)
def __str__(self):
return self.title
class Meta:
verbose_name = 'مدل جزیات'
verbose_name_plural = 'مدل های جزیات'
class ProductDetailCategory(models.Model):
@@ -176,8 +164,6 @@ class CommentModel(models.Model):
def __str__(self):
return f"{self.user}-{self.content[:30]}"
class AttributeType(models.Model):
name = models.CharField(verbose_name='نام نوع متغییر', max_length=100)
@@ -199,7 +185,6 @@ class AttributeValue(models.Model):
def __str__(self):
return f"{self.attribute_type}: {self.value}"
class ProductImageModel(models.Model):
name = models.CharField(max_length=30, verbose_name='نام عکس')
image = models.ImageField(upload_to='product_images/')
@@ -215,7 +200,6 @@ class ProductImageModel(models.Model):
class ProductDetailModel(models.Model):
name = models.CharField(max_length=50, verbose_name='نام جزيیات', help_text='این متن فقط برای راحتی در استفاده از پنل ادمین میباشد')
detail_category = models.ForeignKey(ProductDetailCategory, on_delete=models.CASCADE, verbose_name='دسته بندی جزيات')
detail = models.ManyToManyField(DetailModel, verbose_name='جزيات ها')
class Meta:
verbose_name = 'جزیات محصول'
@@ -223,6 +207,22 @@ class ProductDetailModel(models.Model):
def __str__(self):
return f'جزيیات محصول {self.detail_category.title} - {self.name}'
class DetailModel(models.Model):
title = models.CharField(max_length=50, verbose_name='عنوان')
detail_text1 = models.CharField(max_length=150 , verbose_name='متن جزیات ۱')
detail_text2 = models.CharField(max_length=150 , verbose_name='متن جزیات ۲', blank=True, null=True)
detail_text3 = models.CharField(max_length=150 , verbose_name='متن جزیات ۳', blank=True, null=True)
detail_text4 = models.CharField(max_length=150 , verbose_name='متن جزیات ۴', blank=True, null=True)
detail_model = models.ForeignKey(ProductDetailModel, on_delete=models.CASCADE, verbose_name='دسته بندی جزيات', related_name='details')
def __str__(self):
return f'{self.title}'
class Meta:
verbose_name = 'مدل جزیات'
verbose_name_plural = 'مدل های جزیات'
class ProductVariant(models.Model):
product = models.ForeignKey(ProductModel, on_delete=models.CASCADE, related_name='variants', verbose_name='محصول')
product_attributes = models.ManyToManyField(AttributeValue, verbose_name='ویژگی‌ها', related_name='variant')
+3 -3
View File
@@ -10,14 +10,14 @@ from django.contrib.auth.models import AnonymousUser
class DetailSerializer(serializers.ModelSerializer):
class Meta:
model = DetailModel
fields = '__all__'
exclude = ['detail_model']
class ProductDetailSerializer(serializers.ModelSerializer):
detail = DetailSerializer(many=True, read_only=True)
details = DetailSerializer(many=True, read_only=True)
detail_category = serializers.StringRelatedField()
class Meta:
model = ProductDetailModel
fields = "__all__"
exclude = ['name']
class AttributeTypeSerialzier(serializers.ModelSerializer):