Как отобразить варианты в форме django на основе базы данных
Я пишу приложение на django, которое помогает создать список покупок на основе акций магазина.
Склад магазина будет храниться в базе данных, которая выглядит следующим образом (пожалуйста, не обращайте внимания на орфографические ошибки!):
| Тип | Name | Цвет |
|---|---|---|
| Фрукты | Яблоко | Розовый |
| Фрукты | Яблоко | Зеленый |
| Фрукты | Банана | Желтый |
| Фрукты | Банана | Зеленый |
| Фрукты | Клементин | Оранжевый |
| Фрукты | Черника | Синий |
| Вег | Томат | Красный |
| Вег | Шпинат | Темно-зеленый |
| Вег | Кале | Темно-зеленый |
| Овощи | Карликовая фасоль | Светло-зеленый |
Из этого запаса магазина пользователь может создать список покупок, выбрав три вышеуказанных поля с помощью формы.
Пользователь сначала выбирает тип - который должен отображаться как выбор между "Fruit" и "Veg".
Тогда, когда они выбирают, например, "Фрукты", только фрукты должны быть представлены в качестве вариантов выбора в "Названии".
Наконец, чтобы они могли выбрать цвет, в качестве вариантов в форме должен отображаться только соответствующий цвет выбранного фрукта.
Для создания базы данных складских запасов магазина я создал следующую форму:
Class Stock(models.Model):
Type_choices = models.TextChoices('Fruit','Veg')
stock_type = models.CharField(choices=Type_choices.choices)
name = models.CharField(max_length=264, unique=False)
colour = models.CharField(max_length=264, unique=False)
Затем я заполнил ее, чтобы она выглядела как приведенная выше таблица.
Для хранения списка покупок я создал модель:
Class ShoppingList(models.Model):
stock_type = models.ForeignKey(Stock, on_delete=models.CASCADE)
name = models.ForeignKey(Stock, on_delete=models.CASCADE)
colour = models.ForeignKey(Stock, on_delete=models.CASCADE)
Эта модель определенно не верна, и мне интересно, может ли кто-нибудь помочь мне с этим?
В файле views.py у меня есть следующее:
def shopping_list_view(request):
shopping_list_form = forms.ShoppingList()
if request.method == 'POST':
shopping_list_form = forms.ShoppingList()
if shopping_list_form.is_valid():
shopping_list_form.save(commit=True)
return views.home_view(request)
return render(request, 'shopping_list.html', {'form':shopping_list_form})
Наконец, в файле shopping_list.html у меня есть:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ShoppingList</title>
<!-- Stylesheets -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<h1>Fill out shopping list</h1>
<div class="container">
<form action="" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" class="btn btn-primary" name="" id="" value="Submit">
</form>
</div>
</body>
</html>
Благодарен, если кто-то может помочь мне с этим!