Форма Django не сохраняется, когда у меня action = нужному url

Если я использую action="" в моей форме django, форма работает правильно, но отправляет пользователя на неправильную страницу. Я хочу, чтобы пользователь возвращался на макрос/страницу после отправки формы, но когда я добавляю url в action (например, action="{% url 'macro' %}"), он переходит на страницу, но форма не сохраняется. Подскажите, как с этим справиться? Код ниже:

(Вариант 1) macro_update.html -> форма здесь работает правильно, но переводит пользователя не на ту страницу

                <ul>
                    <form action="" method="post">
                        {% csrf_token %}
                        {{ macro_form.as_ul }}
                        <input type="submit" value="Submit">
                    </form>
                </ul>

(Вариант 2) macro_update.html -> пользователь перенаправляется на нужную страницу после отправки, но данные формы не обновляются/сохраняются

                <ul>
                    <form action="{% url 'macro' %}" method="post">
                        {% csrf_token %}
                        {{ macro_form.as_ul }}
                        <input type="submit" value="Submit">
                    </form>
                </ul>

views.py

@login_required(login_url='login')
def macroUpdate(request):

    if request.method == "POST":
        macro_form = MacroForm(request.POST, instance=request.user.profile)
        if macro_form.is_valid():
            macro_form.save()
            messages.success(request,('Your macros were successfully updated!'))
        else:
            messages.error(request,('Unable to complete request'))
        return redirect("profile")

    macro_form = MacroForm(instance=request.user.profile)    
    context = {"user":request.user, "macro_form":macro_form } 
    return render(request, 'macro_update.html', context)

urls.py

urlpatterns = [
    path('', views.loginPage, name='login'),
    path('register/', views.registerPage, name='register'),
    path('profile/', views.profilePage, name='profile'),
    path('profile/update/', views.profileUpdate, name='profile-update'),
    path('logout/', views.logoutUser, name='logout-user'),
    path('macro/', views.macroPage, name='macro'),
    path('macro/update/', views.macroUpdate, name='macro-update'),
]

Я хочу, чтобы пользователь возвращался на макрос/страницу после отправки формы, но когда я добавляю url в action (например, action="{% url 'macro' %}"), он переходит на страницу, но форма не сохраняется.

Потому что данные формы должны попасть в представление macroUpdate для сохранения, а не macroPage, для перенаправления на страницу макроса после отправки формы вы можете использовать redirect("macro") так:

views.py:

@login_required(login_url='login')
def macroUpdate(request):

    if request.method == "POST":
        macro_form = MacroForm(request.POST, instance=request.user.profile)
        if macro_form.is_valid():
            macro_form.save()
            messages.success(request,('Your macros were successfully updated!'))
        else:
            messages.error(request,('Unable to complete request'))
        return redirect("macro")

    macro_form = MacroForm(instance=request.user.profile)    
    context = {"user":request.user, "macro_form":macro_form } 
    return render(request, 'macro_update.html', context)

Просто удалите атрибут action из тега macro_update.html, поскольку Django всегда берет маршрут текущей страницы, так:

<ul>
    <form method="POST">
        {% csrf_token %}
        {{ macro_form.as_ul }}
        <input type="submit" value="Submit">
    </form>
</ul>
Вернуться на верх