в моем шаблоне у меня есть простой тег, который перенаправляет меня на просмотр:
шаблон боке. 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
в качестве аргумента для метода в представлении