前提・実現したいこと
python=3.7.0
django=(2, 0, 2, 'final', 0)
の環境で開発しています。
プライマリーキーごとにコメントページを作りたいと思っているのですが実際にはurlの数値が変わっても同じページに飛んでしまいます。
URLが/4/commentでフォームを送信したコメントはURLが/4/comment_listの結果ページで表示されるようにしたい。
![]
URLが/5/commentでフォームを送信したコメントはURLが/5/comment_listの結果ページで表示されるようにしたい。
フォーム部分に関して。models.pyはこのようになっております。
python
1class Comment(models.Model): 2 question = models.ForeignKey(Question, on_delete=models.PROTECT, default=1) 3 kansou = models.TextField('コメント', blank=True, null=True)
forms.pyは
python
1class CommentForm(forms.ModelForm): 2 3 class Meta: 4 model = Comment 5 fields ="__all__"
本来はfields =('kansou',)としなくてはならないのですが現在は試行錯誤の段階のためallにしております。
python
1def commentview(request, pk): 2 comment = get_object_or_404(Question, pk=pk) 3 form = CommentForm(request.POST or None) 4 if request.method == 'POST' and form.is_valid(): 5 form.save() 6 return redirect('polls:comment_list', comment.pk) 7 context = { 8 'form': form 9 } 10 return render(request, 'polls/comment_form.html', context) 11
views.pyでこのように記載されております。
このようにしてフォームを動かしています。
ただ前述の通りURLが変わっても同じコメントが表示されてしまいます。
試したこと
実験①
views.pyをここから
python
1def commentlist(request, pk): 2 comment = get_object_or_404(Question, pk=pk) 3 context = { 4 'comment_ichiran':Comment.objects.all(), 5 } 6 return render(request, 'polls/comment_list.html', context)
python
1def commentlist(request, pk): 2 comment = get_object_or_404(Question, pk=pk) 3 context = { 4 'comment_ichiran':Comment.objects.filter(pk=pk),**←変更部分** 5 } 6 return render(request, 'polls/comment_list.html', context)
としましたがすべてにフィルターがかかってしまいコメントページでなにも見られなくなってしまいました。
(HTTP/1.1" 200 313)と表示されているのでエラーではありませんでした。
実験②
コメントの一覧表示ページのコードここから
python
1{% for list in comment_ichiran %} 2 3 <h2>{{ list.kansou }}</h2> 4 5{% endfor %}
このように変更しました
python
1{% for list in question.comment_set.all %}←変更部分 2 3 <h2>{{ list.kansou }}</h2> 4 5{% endfor %} 6
しかし結果は先ほどと同じでエラーは出ないもののなにも表示されません。
情報が足りなければ適宜補足いたします。
アドバイスがあればお願いいたします。
ご指摘を受けコードを追加いたしました
これがcommentに紐づくQuestionのコードになります。
models.py
class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def was_published_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now was_published_recently.admin_order_field = 'pub_date' was_published_recently.boolean = True was_published_recently.short_description = 'Published recently?'
またurlに関してはint:pk/comment/でコメントフォームを表示しint:pk/comment_list/でフォームで送ったコメントの一覧に遷移するようにしています。
urls.py
python
1from django.urls import path 2 3from . import views 4 5app_name = 'polls' 6urlpatterns = [ 7 path('', views.IndexView.as_view(), name='index'), 8 path('<int:pk>/', views.DetailView.as_view(), name='detail'), 9 path('<int:pk>/results/', views.ResultsView.as_view(), name='results'), 10 path('<int:question_id>/vote/', views.vote, name='vote'), 11 path('<int:pk>/comment/', views.CommentView.as_view(), name='comment'), 12 path('<int:pk>/comment_list/', views.commentlist, name='comment_list'), 13]

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/08 12:02
2018/12/08 12:08
2018/12/09 08:41
2018/12/10 02:27