В Django как сделать так, чтобы на странице товара отображались только те варианты, которые есть на складе, когда пользователь выбрал 1 вариант?
Я новичок в Django и пытаюсь создать сайт электронной коммерции в качестве учебного проекта. Я создаю страницу для просмотра деталей одного продукта, и моя проблема заключается в следующем:
у продукта есть два типа вариаций, которые пользователи могут выбрать (размер и цвет). Это элементы HTML, показывающие различные варианты ProductVariations в качестве опций. Один имеет варианты маленький, средний, большой, а другой - красный, зеленый, синий
- когда пользователь выбирает один вариант (Цвет: Красный), то я хочу, чтобы другой элемент select отображал ТОЛЬКО размеры, имеющиеся на складе для этого товара, в этом цвете. Аналогично, если пользователь выбирает размер: Средний, то я хочу, чтобы элемент Select для цвета показывал только цвета, доступные в средней комплектации.
Вот мои модели:
class Product(models.Model):
category_fk = models.ForeignKey(to=Category, on_delete=models.CASCADE)
subcategory_fk = models.ForeignKey(to=SubCategory, on_delete=models.CASCADE)
product_name = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200,unique=True)
description = models.TextField(max_length=500, blank=True)
price = models.IntegerField()
image = models.ImageField(upload_to='photos/products')
class VariationCategory(models.Model):
name = models.CharField(max_length=50,unique=True)
class ProductVariation(models.Model):
product_id = models.ForeignKey(to=Product, on_delete=models.CASCADE)
variation_category = models.ForeignKey(to=VariationCategory,on_delete=models.CASCADE,null=True)
variation_value = models.CharField(max_length=100,)
date_created = models.DateTimeField(auto_now_add=True)
class ProductStock(models.Model):
product_fk = models.ForeignKey(to=Product,on_delete=models.CASCADE, related_name="productstock")
variation_mtm = models.ManyToManyField(to=ProductVariation,blank=True,)
quantity = models.IntegerField()
date_created = models.DateField(auto_now_add=True,null=True)
date_updated = models.DateField(auto_now=True)
для ясности: примерами VariationCategory могут быть "размер" или "цвет" примерами ProductVariation могут быть "красный", "синий", "средний" или "маленький". ProductStock имеет отношения "многие-ко-многим" с ProductVariation. Таким образом, элемент ProductStock для продаваемой нами толстовки будет выглядеть так: толстовка красного цвета/большое количество 50 или толстовка синего цвета/среднее количество 40.
Моя проблема в том, что я не уверен, как начать решать эту задачу. Сначала я решил, что передам количество ProductStock для каждой комбинации вариаций на передний план и сделаю все на jQuery. Но если бы это был реальный магазин, то передавать уровни количества товара на передний план было бы плохой идеей. Ваши конкуренты могли бы таким образом отслеживать уровень ваших запасов. Так как же лучше всего подойти к решению этой задачи? Потому что я рисую пустоту и не могу найти много информации. Спасибо!!!