Django: POST и GET запросы и рендеринг на шаблоне

Возможно, я потерялся в стакане воды, но в данный момент я не могу разобраться. Я работаю над проектом по созданию ресторана, где клиент может видеть страницу меню, страницу покупки и владелец ресторана после входа в систему может управлять и вводить новый рецепт и создавать свое личное меню. Я пытаюсь сделать следующее: когда владелец ресторана отправляет POST запрос, в котором он вводит рецепт, я хочу, чтобы рецепт появился также на странице, где находится меню. Таким образом можно обновить новый рецепт и изменить старый. (Я копирую код модели, формы и представления для полного обзора):

form.py

class RecipeForm(forms.ModelForm):
class Meta:
    model = Recipe
    fields = '__all__'

model.py

class Recipe(models.Model):
name = models.CharField(max_length=50)
ingredients = models.CharField(max_length=500)

def __str__(self):
    return self.name

View.py

def recipeEntry(request):
recipe_menu = Recipe.objects.all()
form = RecipeForm()

if request.method == 'POST':
    form = RecipeForm(request.POST)
    if form.is_valid():
        form.save()

    return redirect("recipe")

context = {'form':form, 'recipe_menu':recipe_menu}
return render(request, 'inventory/recipe.html', context)

recipe.html

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Recipe</title>
</head>
<body>
    <form method="post", action="">{% csrf_token %}
        {{form.as_p}}
        <input type="submit" value="Add Recipe">
    </form>

    {% for rec in recipe_menu %}
    <div>
        <p>Recipe: {{rec.name}}</p>
        <p>Ingredient :{{rec.ingredients}}</p>

    </div>
    {% endfor %}
</body>
</html>

На данный момент часть отправки POST-запроса работает, не работает только вторая часть. Я попробовал несколько решений, но я не понимаю, что делать. Я думал также создать GET представление для страницы меню, но мне нужно передать URL для получения данных, и у меня ничего не получилось.

Большое спасибо за помощь.

Вы должны попытаться явно создать пустую форму, когда это не пост-запрос :

def recipeEntry(request):
    recipe_menu = Recipe.objects.all()
    # form = RecipeForm() Not here yet

    if request.method == 'POST':
        # Instantiate form with request.POST
        form = RecipeForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect("recipe")
    else:  # Explicitly write else block
        # Instantiate empty form for get request
        form = RecipeForm()

        context = {'form':form, 'recipe_menu':recipe_menu}
        return render(request, 'inventory/recipe.html', context)
Вернуться на верх