Уточнение - цвета и азмеры нужно свзяать между собой.
Пример: выбрали цвет = показало доступные размеры
Да/нет?
Зачем цвет делать куском фотки, если он по моей задумке должен быть общий для многих ВариантовТоваров?
Название: джинсы гуччи
Размер: 43
Цвет: Красный
Артикул: 55555
Название: Джинсы Гуччи
Размер: 45
Цвет: Красный
Артикул: 55555
Название: Джинсы гуччи
Размер: 43
Цвет: Зеленый
Артикул: 55555
КатегорияТовара (MPTT)
название = (джинса, футболка, ...)
Бренд
Название бренда
Товар
категория = m2m(КатегорияТовара) (один товар может находиться в несколькоих категориях - по дереву)
бренд = FK(Бренд)
ФотоТовара
фото = imageField
Цвет:
imagePreview = imageField (берем "кусочек" фотки как цвет. При наведении - выводим title, например, красный)
название
ВариантТовара
артикул
цена
размер
товар = FK(Товар,related_name="variants")
фотки = m2m (фотоТовара)
цвет = FK(Цвет) (цвет может быть только один у варианта)
views.py:
(берем slug категории)
category = КатегорияТовара.objects.get(slug=slug)
vProducts = Product.objects.filter(category=category).prefetch_related("variants","variants__color","variants__images")
рендер в шаблон vProducts - все "виртуальные товары" для данной категории (со всеми его вариантами). Одновременно, варианты тащат за собой цвета и фотки в одном запросе.
В шаблоне:
- в цикле проходим по всем "виртуальным товарам" (имеем пустую "карточку" - заготовку, контейнер)
- через regroup делаем нужный нам вид (группировка по цветам)
{% regroup product.variants.all by color as colors %}
<p>Цвета</p>
{% for color in colors %}
{{ color.grouper }}
{% endfor %}
<p>Размеры первого цвета</p>
{% with colors|first as firstElements %}
{% for variant in firstElements.list %}
<b>{{ variant.size }}</b>
{% endfor %}
{% endwith %}
category = Category.objects.get(slug=slug)
products = Product.objects.filter(category=category).prefetch_related("variants").all()
return render(request,template,locals())
в шаблоне:
{% for virtual in products %}
{% with virtual.variants.all|first as firstProduct %}
#выводим фотки товара в цикле
#выводим основную инфу товара
? как выводить цвета? (или же просто брать первый товар из любого цвета?)
{% endwith %}
{% endfor %}
ТипТовара
название = (джинса, футболка, ...)
Коллекция
марка
Товар
коллекция = FK(Коллекция)
тип_товара = FK(ТипТовара)
ФотоТовара
фото = imageField
ВариантТовара
артикул
товар = FK(Товар)
фотки = m2m (фотоТовара)
class Category(MpttModel):
name = models.CharField('name')
.....
class Product(models.Model):
category = models.ForeignKey(Category)
brend
class ProductVariant(models.Model):
sku
product = models.ForeignKey(Product)
color
size
price
.....
class Product(MPTTModel,SeoModel):
color = models.CharField('Цвет',blank=True,null=True,max_length=200)
size = models.CharField('Размер',blank=True,null=True,max_length=200)
stock_amount = models.FloatField(_(u"Stock amount"), default=0)
sub_type = models.PositiveSmallIntegerField(_(u"Subtype"), choices=PRODUCT_TYPE_CHOICES, default=PRODUCT_WITH_VARIANTS)
parent = models.ForeignKey("self", blank=True, null=True, verbose_name=u'Родитель', related_name="variants")
# для связывания товара с категориями и свойствами
categories = models.ManyToManyField("Category", blank=True)
Не совсем только понимаю)
у меня три редьюсера, которые я выношу в combine.
Как я понимаю, каждый редьюсер в combine создает именованный объект.
То есть надо создать отдельный initialReducer, где через АПИ подгрузить данные и заполнить store?