Добавьте галерею изображений как TabularInline в другую модель TabularInline
Я хочу создать модель продукта, которая имеет некоторые Inline запрос, как в каждом продукте вы можете добавить различные атрибуты, как цвет, размер, бренд, ... и каждый вариант может иметь specefic галерея изображений Я использую две галереи модели как TabularInline вариации и вариации как TabularInline продукта Но это не показывает мне tha галерея изображений как tabularinline в вариации, Вот мой код:
productapp.models:
class Product(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True)
description = RichTextUploadingField(null=True)
short_description = RichTextUploadingField(null=True)
price = models.IntegerField()
sku = models.CharField(max_length=200, null=True, blank=True)
dimenstions = models.CharField(max_length=200, null=True, blank=True)
category = models.ManyToManyField(Category, related_name='category')
tag = models.ManyToManyField(Tags, related_name='tag')
attribute = models.ManyToManyField(Attribute, related_name='attribute')
image = models.ImageField(upload_to='shop/image', null=True, blank=True)
def __str__(self):
return self.title
class Variant(models.Model):
title = models.CharField(max_length=200)
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
variations = models.ForeignKey(Variations, on_delete=models.SET_NULL, null=True, blank=True)
regular_price = models.IntegerField()
sale_price = models.IntegerField(null=True, blank=True)
sku = models.CharField(max_length=200, null=True, blank=True)
stock_quantity = models.IntegerField(default=0)
image_id = models.IntegerField(blank=True, null=True, default=0)
def __str__(self):
return self.title
class Gallery(models.Model):
title = models.CharField(max_length=200)
image = models.ImageField(upload_to='shop/gallery', null=True, blank=True)
product = models.ForeignKey(Variant, null=True, on_delete=models.SET_NULL, related_name='gallery')
def __str__(self):
return self.title
Admin.py:
class GalleriesInline(admin.TabularInline):
model = Gallery
extra = 1
readonly_fields = ('pk',)
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'30'})},
}
class VariantInline(admin.TabularInline):
model = Variant
inlines = [GalleriesInline]
extra = 1
readonly_fields = ('image_tag',)
show_change_link = True
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
inlines = [VariantInline]
prepopulated_fields = {"slug": ["title"]}
list_display = ('thumbnail_tag', 'title')
readonly_fields = ('image_preview',)
def image_preview(self, obj):
# ex. the name of column is "image"
if obj.image:
return mark_safe('<img src="{0}" width="150" height="150" style="object-fit:contain" />'.format(obj.image.url))
else:
return '(No image)'
image_preview.short_description = 'Preview'
Я использовал TabularInline, но он не сработал. Кто-нибудь, помогите мне в этой ситуации, что я должен сделать, чтобы иметь галерею изображений для каждой вариации каждого продукта?
После долгих поисков я нашел способ решить эту проблему, Лучшее, что вы можете использовать для этой проблемы - это вложенный инлайн-пакет:
pip install django-nested-inline