rebuild of detail of product
This commit is contained in:
@@ -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
@@ -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')
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user