これはほぼ間違いなく初心者のエラーですが、何が問題なのかわかりません。ここで他の同様の質問を読みましたが、まったく同じではないようです。
データを投稿する単純なフォームがありますが、常に完全に空白の応答が返されます。
コードは次のとおりです。
url.py
urlpatterns = patterns('shotgun.views',
# shotgun App URL patterns
url(r'^$', ControlPanelView.as_view(), name='index'),
)
フォーム.py
class ProjectAssignmentForm(forms.Form):
projects = MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
def __init__(self, user_projs, *args, **kwargs):
super(ProjectAssignmentForm, self).__init__(*args, **kwargs)
self.fields["projects"].choices = tuple([(item.name, item.name) for item in SGProject.objects.all() if item.name != "Template Project"])
self.fields["projects"].initial = user_projs
view.py
class ControlPanelView(SLBaseView):
template_name = "shotgun/index.html"
def get_context_data(self, **kwargs):
context = super(ControlPanelView, self).get_context_data(**kwargs)
sg_user = SGCustomNonProjectEntity01.objects.filter(code=self.request.user.get_full_name())[0]
projs = SGProject.objects.filter(Q(entities__entity_id=sg_user.id), Q(entities__type="CustomNonProjectEntity01"))
context["assigned_projs"] = projs
if self.request.method == "POST":
form = ProjectAssignmentForm(projs, self.request.POST)
if form.is_valid():
# update user projects logic
else:
form = ProjectAssignmentForm(projs)
context["pas_form"] = form
return context
template.html
<div class="full_width" >
<h4 class="no_pad" >{{ user.first_name|upper }}'S CONTROL PANEL</h4>
</div>
<div class="full_width top_tab">
<div class="border border_pad">
<h6>PROJECTS YOU ARE ASSIGNED TO</h6>
{% if assigned_projs %}
<form action="/intranet/shotgun/" method="post">{% csrf_token %}
<div class="border_pad">
{{ pas_form.projects.errors }}
{{ pas_form.projects }}
<input type="submit" value="Update" />
</div>
</form>
{% else %}
<p>You are not assigned to any projects.</p>
{% endif %}
</div>
</div>
settings.py で csrf ミドルウェアを有効にしています。
これらすべてから私が期待する動作は次のとおりです。
非バインド データ ページは期待どおりに表示されますが、フォームの [更新] ボタンをクリックしてポスト リクエストが作成されるとすぐに、空白のページが表示されます。ステートメントの後に例外をスローしようとしましたif self.request.method == "POST"
が、コードはここまで到達していないようです。何が起こっているのか本当にわかりません。