Различные выпадающие списки выбора для разных товаров с помощью 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. Я очень новичок в этом и чувствую себя очень растерянным. Благодарен за любую помощь.

Вернуться на верх