Я работаю над расширением webapp, с которым мы закончили после завершения официального учебника Django.Перенаправление после сохранения формы на Django
Одна из функциональных возможностей, которую я хочу добавить, - это возможность для пользователей самостоятельно добавлять опросы.
Я борюсь с получением страницы для обработки данных, а затем перенаправляется на индексную страницу ('/ polls').
Когда я отправляю новый опрос в качестве зарегистрированного пользователя, я возвращаюсь на свою индексную страницу, которая должна показывать самые последние опубликованные опросы или в случае отсутствия опросов, сообщение «Нет опросов». "
По какой-то причине я всегда вижу «Нет опросов», но как только я нажимаю на индексную страницу по ссылке на сайте, она отображает все мои опросы, включая мой последний созданный, данные нетронутыми!
Любые мысли здесь? Я думаю, что я включил соответствующую информацию ниже, но счастлив предоставить больше. Заранее благодарим за любую помощь/совет.
views.py
class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
"""Return the last five published questions."""
return Poll.objects.order_by('-pub_date')[:15]
@login_required
def add_poll(request):
ChoiceFormSet = formset_factory(ChoiceForm, extra=3, min_num=2, validate_min=2)
if request.method == 'POST':
form = PollForm(request.POST)
formset = ChoiceFormSet(request.POST)
if all([form.is_valid(), formset.is_valid()]):
poll = form.save()
for inline_form in formset:
if inline_form.cleaned_data:
choice = inline_form.save(commit=False)
choice.question = poll
choice.save()
return render(request, 'polls/index.html', {})
else:
form = PollForm()
formset = ChoiceFormSet()
return render(request, 'polls/add_poll.html', {'form': form, 'formset': formset})
add_poll.html
{% extends 'polls/base.html' %}
{% block title %}Add Poll{% endblock %}
{% block body_block %}
<form role="form" id="poll_form" method="post" action="{% url 'polls:add_poll' %}">
<h2 class="form-signin-heading">Add a Poll</h2>
{% csrf_token %}
<table>
{{ form }}
{{ formset }}
</table>
<br/>
<button class="btn btn-primary" type="submit" name="submit">Create Poll</button>
</form>
{% endblock %}
index.html
{% extends 'polls/base.html' %}
{% block body_block %}
{% if latest_question_list %}
<ul>
{% for poll in latest_question_list %}
<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
{% endblock %}
urls.py
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
url(r'^add_poll/$', views.add_poll, name='add_poll'),
url(r'^(?P<question_id>\d+)/vote/$', views.vote, name='vote'),
url(r'^profile_page/$', views.ProfileView.as_view(), name='profile_page'),
url(r'^edit_profile/$', views.edit_profile, name='edit_profile'),
)
Благодаря Тодор, это имеет смысл. Пропустит ли контекст, содержащий список опросов вместо {} в исходной функции рендеринга, также выполнить работу в такой ситуации? – ploo
Да, возможно, это сработает. Однако вы не должны этого делать *. Вы должны * всегда * перенаправлять после POST. – Serafeim
Я согласен с @Serafeim, он будет работать, но не делайте этого. – Todor