Различные выпадающие списки выбора для разных товаров с помощью Django
Я создаю веб-магазин для школьного проекта и хотел бы добавить выпадающий список с вариантами цвета для некоторых продуктов (catears), а для других продуктов (quipu) я хотел бы предоставить клиенту два выпадающих списка и текстовое поле, где он может ввести имя/работу, чтобы сделать свой заказ индивидуальным. Так что я думаю о чем-то вроде этого в html:
<p class="mt-3">{{ product.description }}</p>
<form class="form" action="{% url 'add_to_bag' product.id %}" method="POST">
{% csrf_token %}
<div class="form-row">
{% if catears_has_colors %}
{% include 'products/includes/catears_has_colors.html' %}
{% elif qupiu_custom_form %}
{% include 'products/includes/qupiu_custom_form.html' %}
{% endif %}
Quipu_custom_form выглядит так, catears_has_colors аналогично:
<div class="quipu-form-control" name="quipu_color_choise" id="id_quipu_color_choise">
<p>Write the name/word you would like (max 12 letters), and pick what color and type of stone pearl you prefer</p>
<div class="col-12 col-md-6">
<select class="form-control rounded-0 w-50">
<option value="pearl_white" selected>Pearl White</option>
<option value="light_blue">Light Blue</option>
</select>
</div>
<div class="col-12 col-md-6">
<select class="form-control rounded-0 w-50">
<option value="labradorite" selected>Labradorite</option>
<option value="amethyst">Amethyst</option>
</select>
</div>
<div class="col-12">
<input type="text" name="quipu_custom_name" id="id_quipu_custom_name" >
</div>
</div>
А в products/models.py я получил такие классы:
class CatEarColor(models.Model):
BLUE = 'BL'
PINK = 'PN'
CATEAR_COLOR = [
(BLUE, 'blue'),
(PINK, 'pink'),
]
catear_color = models.CharField(
max_length=2, choices=CATEAR_COLOR, default=BLUE
)
def __str__(self):
return self.catear_color
class QuipuForm(models.Model):
PEARL_WHITE = 'PW'
LIGHT_BLUE = 'LB'
QUIPU_COLOR = [
(PEARL_WHITE, 'Pearl White'),
(LIGHT_BLUE, 'Light Blue'),
]
quipu_color = models.CharField(
max_length=2, choices=QUIPU_COLOR, default=PEARL_WHITE
)
LABRADORITE = 'LB'
AMETHYST = 'AM'
QUPIU_STONE_PEARL = [
('LB', 'Labradorite'),
('AM', 'Amethyst'),
]
quipu_stone_pearl = models.CharField(
max_length=2, choices=QUPIU_STONE_PEARL, default=LABRADORITE
)
name_field = models.CharField(max_length=12)
def __str__(self):
return f'You picked {self.quipu_color} and {self.quipu_stone_pearl}'
class Product(models.Model):
category = models.ForeignKey('Category', null=True, blank=True,
on_delete=models.SET_NULL)
sku = models.CharField(max_length=200, null=True, blank=True)
name = models.CharField(max_length=200)
description = models.TextField()
catears_has_colors = models.ForeignKey('CatEarColor', null=True,
blank=True,
on_delete=models.SET_NULL)
qupiu_custom_form = models.ForeignKey('QuipuForm', null=True,
on_delete=models.SET_NULL,
blank=True)
price = models.DecimalField(max_digits=6, decimal_places=2)
image_url = models.URLField(max_length=1024, null=True, blank=True)
image = models.ImageField(null=True, blank=True)
def __str__(self):
return self.name
Прошу прощения, если это много кода, но я надеюсь, что кто-то поймет, что я хочу сделать. Когда клиент сделал свой выбор, он должен появиться в корзине вместе с товаром и заказом в админке. С помощью этого кода я могу видеть варианты в админке и выбирать из них, но это не принесет никакой пользы. Что может быть хорошим способом для создания чего-то подобного? Продукты добавляются в .json. Я очень новичок в этом и чувствую себя очень растерянным. Благодарен за любую помощь.