現在作業中のDjangoプロジェクトで問題が発生しています。これは正常に動作しますモデルの変更後にDjangoビューが更新されない
class CreatePollView(View):
template = "polls/create_poll.html"
@method_decorator(login_required)
def post(self, request):
question_text = request.POST['question']
pub_date = now()
new_question = Question(question_text=question_text, pub_date=pub_date)
new_question.save()
options_list = request.POST.getlist('options')
for option in options_list:
option_text = option
new_option = Option(option_text=option_text, question=new_question)
new_option.save()
return HttpResponseRedirect(reverse('polls:detail', args=(new_question.id,)))
:
は、私はPOSTリクエストを経由してモデルのインスタンスを作成するビューを持っています。私は質問とそのオプションをDBに追加し、それが管理者に追加されていることを確認することができます。しかし、私がindex.htmlを呼び出すと、すべての質問オブジェクトがリストアップされ、更新されません。
class IndexView(View):
template = loader.get_template('polls/index.html')
questions = Question.objects.all()
context = {
'question_list': questions,
}
def get(self, request):
return HttpResponse(self.template.render(self.context, request))
テンプレート:
{% extends 'homepage/base.html' %}
{% block content %}
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>All Polls:</h1>
<div>
{% for question in question_list %}
<p><a href="{{ question.pk }}">{{ question }}</a></p>
{% endfor %}
<a href="new_poll" class="btn btn-primary">New Poll</a>
</div>
</div>
</div>
{% endblock %}
私はビューにエラーを構築する場合、それを修正して、再度コードを実行し、それはリストを更新。 Question.objects.all()
しかし、私が新しいモデルインスタンスを投稿すると、モデルの変更はここに表示されません。誰かが私が間違っていることを教えてもらえますか?
EDIT:これは、クラスベースのビューでのみ発生します。メソッドビューを使用していたとき、正常に機能しました。
def index(request):
question_list = Question.objects.all()
template = loader.get_template('polls/index.html')
context = {
'question_list': question_list,
}
return HttpResponse(template.render(context, request))
def new_poll(request):
if request.method == 'POST':
question_text = request.POST['question']
pub_date = now()
new_question = Question(question_text=question_text, pub_date=pub_date)
new_question.save()
options_list = request.POST.getlist('options')
# import pdb
# pdb.set_trace()
for option in options_list:
option_text = option
new_option = Option(option_text=option_text, question=new_question)
new_option.save()
return HttpResponseRedirect(reverse('polls:detail', args=(new_question.id,)))
else:
template = loader.get_template('polls/create_poll.html')
context = {
'user': request.user
}
return HttpResponse(template.render(context, request))
一般的なクラスベースのビューを使用すると、これよりもはるかに少ないコードを書くことができます。 –
私はリファクタリングの途中ですが、これはいいですが、最初に私のモデルに変更を表示する方法を理解したいと思います。 – Ozymandias