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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

2068閲覧

Django DetailViewでのフォーム作成方法。

Mario_11

総合スコア95

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2020/05/08 12:38

編集2020/05/08 23:49

現在Djangoで違反報告機能を作っています。
単純にボタンを押して違反報告を送信させることはできましたが、違反報告する前にカテゴリの選択をしたいのですが、フォームをどこに書き入れたらいいのかがわかりません。
違反報告ボタンは記事詳細ページ(class ItemDetailView)に表示させたいです。

python

1#models.py 2#Item = 記事 3 4class Report(models.Model): 5 REPORT_CHOICES = [ 6 (1, '宣伝行為'), 7 (2, 'スパム'), 8 (3, '法律違反'), 9 (4, 'その他'), 10 ] 11 category = models.IntegerField(verbose_name="カテゴリ", choices=REPORT_CHOICES, default=1) 12 report_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=True) 13 report = models.ForeignKey(Item, verbose_name='通報した記事', on_delete=models.PROTECT, blank=True) 14 report_at = models.DateTimeField(verbose_name='日付',auto_now_add=True) 15 text = models.CharField('備考欄', max_length=200) 16 17 class Meta: 18 verbose_name = _('レポート') 19 verbose_name_plural = _('レポート')

python

1#views.py 2class ItemDetailView(DetailView): 3 model = Item 4 def get_context_data(self, **kwargs): 5 context = super(ItemDetailView, self).get_context_data(**kwargs) 6 form = ReportForm() 7 context["form"] = form 8 return context 9 10def ReportPost(request, pk): 11 """報告""" 12 post = get_object_or_404(Item, pk=pk) 13 _report = Report() 14 _report.report = post 15 _report.report_user = User.objects.get(email=request.user.email) 16 _report.save() 17 return redirect('app:top') 18 19 20#urls.py 21 path('report/<int:pk>/', views.ReportPost, name='report'), 22

上記のコードのように報告ボタン(ReportPost)と記事詳細ページ(ItemDetailView)を書いてみたのですが、送信はされたのですが、変更しても値がデフォルトのままでした。

html

1報告ボタン 2<div class="popup_content"> 3 <label for="trigger" class="close_btn">×</label> 4 {%crispy form%} 5 <form action="{% url 'app:report' item.pk %}" method="post"> 6 <button class="btn btn-outline-success float-right" type="submit" name="button">報告</button> 7 {% csrf_token %} 8 </form> 9</div>

何かアドバイスをいただきたいです。
必要なコードがあれば追記いたしますのでよろしくお願いいたします。

#追記
forms.pyの追記させていただきました。

python

1forms.py 2 3class ReportForm(forms.ModelForm): 4 class Meta: 5 model = Report 6 fields = ('category', 'text',) 7 widgets = { 8 'text': forms.TextInput(attrs={'placeholder':'詳細な理由を記入してください(200文字以内)'}), 9 'category': forms.RadioSelect(), 10 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ForestSeo

2020/05/08 21:41 編集

ItemDetailViewに報告ボタンがあるんですよね。categoryを選ぶのもItemDetailViewですよね。 あとformはどんな感じですか
Mario_11

2020/05/08 23:50

そうです! formのコード追記させていただきました。
guest

回答1

0

ベストアンサー

フォームをレンダリングする場所を、formタグ内に移動したらどうなりますか?

html

1<!-- item_detail.html --> 2<div class="popup_content"> 3 <label for="trigger" class="close_btn">×</label> 4 <form action="{% url 'app:report' item.pk %}" method="post"> 5 {%crispy form%} 6 <button class="btn btn-outline-success float-right" type="submit" name="button">報告</button> 7 {% csrf_token %} 8 </form> 9</div>

投稿2020/05/09 05:48

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ForestSeo

2020/05/09 09:19

detailでPOSTってよりはurlパラメーターにidと理由を渡してreportに飛ばせばいいんじゃないですか
hasami

2020/05/09 12:20

質問者は、おそらく表示している記事(Item)に対して報告(Report)を投稿するフローを検討されていると思うので、これはこれで良いのではないかと思います。
Mario_11

2020/05/10 03:17

ご回答ありがとうございます。 formの位置を移動したのですが、ボタンを押せずページ遷移できませんでした。
hasami

2020/05/10 03:18

ボタンを押せないとは、どのような現象なのでしょうか?
Mario_11

2020/05/10 04:46

伝え方が下手で申し訳ありません。 ボタンを押しても何も反応しないということです。
hasami

2020/05/10 08:49

ブラウザのバリデーションで失敗しているということはありませんか? 非表示で必須のinputがあるとか・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問