質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

python、djangoでプライマリーキーごとにコメントページを作りたい

sr2460
sr2460

総合スコア47

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

156閲覧

投稿2018/12/07 11:20

編集2018/12/08 12:01

前提・実現したいこと

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

class Comment(models.Model): question = models.ForeignKey(Question, on_delete=models.PROTECT, default=1) kansou = models.TextField('コメント', blank=True, null=True)

forms.pyは

python

class CommentForm(forms.ModelForm): class Meta: model = Comment fields ="__all__"

本来はfields =('kansou',)としなくてはならないのですが現在は試行錯誤の段階のためallにしております。

python

def commentview(request, pk): comment = get_object_or_404(Question, pk=pk) form = CommentForm(request.POST or None) if request.method == 'POST' and form.is_valid(): form.save() return redirect('polls:comment_list', comment.pk) context = { 'form': form } return render(request, 'polls/comment_form.html', context)

views.pyでこのように記載されております。
このようにしてフォームを動かしています。
ただ前述の通りURLが変わっても同じコメントが表示されてしまいます。

試したこと

実験①

views.pyをここから

python

def commentlist(request, pk): comment = get_object_or_404(Question, pk=pk) context = { 'comment_ichiran':Comment.objects.all(), } return render(request, 'polls/comment_list.html', context)

python

def commentlist(request, pk): comment = get_object_or_404(Question, pk=pk) context = { 'comment_ichiran':Comment.objects.filter(pk=pk),**←変更部分** } return render(request, 'polls/comment_list.html', context)

としましたがすべてにフィルターがかかってしまいコメントページでなにも見られなくなってしまいました。
(HTTP/1.1" 200 313)と表示されているのでエラーではありませんでした。

実験②

コメントの一覧表示ページのコードここから

python

{% for list in comment_ichiran %} <h2>{{ list.kansou }}</h2> {% endfor %}

このように変更しました

python

{% for list in question.comment_set.all %}←変更部分 <h2>{{ list.kansou }}</h2> {% endfor %}

しかし結果は先ほどと同じでエラーは出ないもののなにも表示されません。
情報が足りなければ適宜補足いたします。
アドバイスがあればお願いいたします。

ご指摘を受けコードを追加いたしました

これが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

from django.urls import path from . import views app_name = 'polls' urlpatterns = [ path('', views.IndexView.as_view(), name='index'), path('<int:pk>/', views.DetailView.as_view(), name='detail'), path('<int:pk>/results/', views.ResultsView.as_view(), name='results'), path('<int:question_id>/vote/', views.vote, name='vote'), path('<int:pk>/comment/', views.CommentView.as_view(), name='comment'), path('<int:pk>/comment_list/', views.commentlist, name='comment_list'), ]

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。