Можно ли добавить поле модели из внешнего интерфейса без необходимости вызывать URL-адрес и шаблон?

#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')