Django: перенаправить на просмотр после нажатия кнопки и выполнить другой метод - PullRequest
0 голосов
/ 25 февраля 2020

в моем шаблоне у меня есть простой тег, который перенаправляет меня на просмотр:

шаблон боке. html

<a href="{% url 'favorites' %}">Click</a>

и в моих представлениях:

def favorites(request):
    url = request.session.get('url')
    user = User.objects.get(username=request.user.username)
    repos = user.users.all()
    return render(request, 'favorites.html', {'url': url, 'repos': repos})

Теперь я хочу выполнить другой метод, который будет добавлять данные в базу данных. Я думал, что я помещаю a tag в форму с методом POST и проверяю представление bokeh , если request.method равен POST. Если да, тогда будет выполняться другой метод, такой как:

шаблон боке. html

<form method="POST">
{% csrf_token %}
    <a href="{% url 'favorites' %}">Click</a>
</form>

и в представлениях:

def bokeh(request):
    if request.method == 'POST':
        add_url_to_database()
        return redirect('favorites')
    #other logic here

def add_url_to_database()
    url = request.session.get('url')
    repo = Repository(url=url, user=request.user)
    repo.save()
    repo.repositorys.add(request.user)


def favorites(request):
    url = request.session.get('url')
    user = User.objects.get(username=request.user.username)
    repos = user.users.all()
    return render(request, 'favorites.html', {'url': url, 'repos': repos})

К сожалению, это решение не работает правильно. Поскольку данные не добавляются в базу данных, но перенаправление в / избранное работает после нажатия кнопки.

РЕДАКТИРОВАТЬ:

Проблема была с a tag в форме. Форма не была отправлена ​​правильно, потому что этот тег просто перенаправлен для просмотра без отправки. Поэтому мне пришлось изменить a tag на button и добавить request в качестве аргумента для метода в представлении

...