Форма Django POST принимается всеми кнопками, кроме 1. Потенциальная ошибка?
Я в полном тупике. У меня есть рабочее представление Django, которое отображало 'posts' для каждого поста в переданном ему списке.
list.html
{% for p in posts %}
#code to display post in a list>
<form action="{% url 'archive_commit' p.oid %}" method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}">
{% if p.is_archived %}
<input type="hidden" name="action" value="unarchive">
<button type="submit", name="p_oid", value="{{ p.oid }}", class="btn btn-primary btn-sm">Unarchive</button>
{% else %}
<input type="hidden" name="action" value="archive">
<button type="submit", name="p_oid", value="{{ p.oid }}", class="btn btn-primary btn-sm">Archive</button>
{% endif %}
</form>
Когда я нажимаю на кнопку архива, он вызывает следующий шаблон URL и вид.
urls.py
url(r'^archive/(?P<oid>.+)/$', views.archive_view, name='archive_post'),
views.py
def archive_view(request, oid):
post = get_object_or_404(models.Post, oid=request.POST.get('p_oid'))
archive_query_param = ''
if request.POST.get('action') == 'archive':
post.is_archived = True
post.save()
messages.success(request, ('Post ' + oid + ' has been archived'))
else:
post.is_archived = False
post.save()
messages.success(request, ('Post ' + oid + ' has been restored'))
archive_query_param = '?archived=True/'
next = request.POST.get('next', '/')
return HttpResponseRedirect(next + archive_query_param)
Вот с какой проблемой я сталкиваюсь. КАЖДЫЙ пост на странице ведет себя как положено, переходя к просмотру и архивируя пост, а затем возвращаясь к следующему, за исключением первого поста в списке. Этот пост просто добавляет параметры запроса формы к своему url и повторно отправляется, не отправляя POST запрос.
например, нажатие кнопки 'archive' для 3 успешных сообщений, за которым следует первое.
[10/Sep/2021 17:46:19] "POST /archive/684f2176015b313ab59cecf574117969cf638f28/ HTTP/1.1" 302 0
[10/Sep/2021 17:46:19] "GET /filter/ HTTP/1.1" 200 3678
[10/Sep/2021 17:46:23] "GET /filter/?tree=torvalds¬in=&path=ip&excl= HTTP/1.1" 200 48869
[10/Sep/2021 17:47:07] "POST /archive/787e9208360117835101f513f7db593dc2525cf8/ HTTP/1.1" 302 0
[10/Sep/2021 17:47:07] "GET /filter/ HTTP/1.1" 200 3678
[10/Sep/2021 17:47:11] "GET /filter/?tree=torvalds¬in=&path=ip&excl= HTTP/1.1" 200 57921
[10/Sep/2021 17:47:12] "POST /archive/b1da683d17972fc851c46331a5efa801bddf9273/ HTTP/1.1" 302 0
[10/Sep/2021 17:47:12] "GET /filter/ HTTP/1.1" 200 3678
[10/Sep/2021 17:47:15] "GET /filter/?tree=torvalds¬in=&path=ip&excl= HTTP/1.1" 200 57868
[10/Sep/2021 17:47:24] "GET /filter/?tree=torvalds¬in=&path=ip&excl=&csrfmiddlewaretoken=hI8jy2ALkYmZok3rEwISyiFfH9BURAJiZjIGkgkBL02GMhMlAWXdT7gjyKcIn9Nk&next=%2Ffilter%2F&action=archive&c_oid=fefae48bf8caab7d56ee4f8181f06602cf73d29e HTTP/1.1" 200 57952
Когда я пытаюсь архивировать первое сообщение на странице, я получаю следующее. Я заполняю список из оператора "for p in posts", поэтому я не уверен, что это сообщение может отличаться от других, все они являются одним и тем же объектом. Более того, если я вручную архивирую это первое сообщение, а затем перезагружаю страницу, новое первое сообщение не архивируется, поэтому я считаю, что это вопрос позиции на странице. Подскажите, что может быть причиной такого странного поведения?
Спасибо