#django #django-models #django-views #django-forms #django-templates
Вопрос:
У меня есть следующие модели рецептов:
class Recipe(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
profile = models.ForeignKey(Profile, on_delete=models.CASCADE,related_name='recipe')
title = models.CharField(max_length=255)
subtitle = models.TextField(max_length=500)
slug = models.SlugField(max_length=255)
ingredients = models.TextField(blank=True, null=True)
description = models.TextField(null=True, blank=True)
image = models.ImageField(upload_to='uploads/', blank=True,null=True)
thumbnail = models.ImageField(upload_to='uploads/', blank=True,null=True)
date_added = models.DateTimeField(auto_now_add=True)
Я создаю экземпляры этой модели с помощью пользовательской формы, которая включает в себя все поля.
Я отображаю все свои модели рецептов на странице с именем my_account, выполнив следующие действия на html-странице.
{% for recipe in recipes %}
<tr>
<td><a href="{% url 'recipe_details' recipe.category.slug recipe.slug %}" class='field'>{{recipe.title}}</a></td>
<td><a href="{% url 'update_recipe' recipe.slug %}" class='button is-dark'>Update</a></td>
<td><a href="{% url 'delete_recipe' recipe.slug %}" class='button is-light'>Remove</a></td>
Мой вопрос в основном заключается в том, могу ли я выполнить следующее на странице my_accounts, где, когда пользователь нажимает кнопку «Добавить ингредиент», все, что пользователь ввел, добавляется в поле «рецепт.ингредиенты» для этого конкретного рецепта.
Пример:
если пользователь вводит «1 столовая ложка сахара» в поле ввода и нажимает «Добавить ингредиент» для черного чая, то «1 столовая ложка сахара» должна быть добавлена в поля ингредиентов для моего экземпляра модели рецепта черного чая.
Комментарии:
1. Обновите свой заголовок и будьте более точны в описании того, чего вы на самом деле хотите достичь, или ваш пост может быть помечен/отклонен голосованием.
Ответ №1:
Ладно, я вроде как разобрался в проблеме, не полностью, но, может быть, на 50-60%.
Во-первых, для достижения желаемого результата Вам придется создать другое поле модели под названием «Ингредиент», которое связано с моделью рецепта.
Также происходит повторное получение информации, введенной пользователем с внешнего интерфейса.
my_accounts.html страница, вы бы добавили следующее.
<td>
<form action= "{% url 'add_ingredient' recipe.slug %}" method="POST">
{% csrf_token %}
<input type="text" value="Add Ingredient" name="ingredient"><button type="submit">Add Ingredient</button>
</form>
</td>
в urls.py
path('add/<slug:recipe_slug>/', views.add_ingredient, name="add_ingredient"),
в views.py
def add_ingredient(request, recipe_slug):
recipe = get_object_or_404(Recipe, slug=recipe_slug)
ingredient = request.POST.get('ingredient')
return redirect('my_account')