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

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

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

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

Python

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

Q&A

0回答

510閲覧

データベースにデータを追加したのちにページ移動しても表示されない

DR.py

総合スコア18

Django

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

Python

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

0グッド

0クリップ

投稿2020/12/25 20:44

編集2020/12/28 21:20

前提・実現したいこと

簡易的なお題に回答を投稿できる大喜利サイトを作っている途中にデータベースがうまく読み込めておらず、表示されない問題が発生してしまった。

###発生している問題
投稿画面から回答を投稿することはでき、データベースにも反映されておりすぐに投票画面に移行しても回答が表示されていない
参考画像
イメージ説明
イメージ説明

もう一度runserverを行い、投票画面に移行すると下の画像のように正常に表示される
イメージ説明

views.py

@login_required def answer_view(request): id = Oogiri_home.objects.order_by('-created_at').first() question = get_object_or_404(Oogiri_home, pk=id.id) if request.method == 'POST': form = AnswerForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.user = request.user post.title = question post.save() return redirect('oogiri_home:index') else: form = AnswerForm() context = {'question': question, 'form': form} return render(request, 'answer_create.html', context,) @login_required def vote_view(request): id = Oogiri_home.objects.order_by('-created_at').first() question = get_object_or_404(Oogiri_home, pk=id.id) if request.method == 'POST': form = VoteForm(request.POST) form.user = request.user if form.is_valid(): form.save() return redirect('oogiri_home:result', id=id.id) else: form = VoteForm() context = {'question': question, 'form': form} return render(request, 'vote.html', context,)

###forms.py

class AnswerForm(forms.ModelForm): class Meta: model = Oogiri_user fields = ('answer',) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' class VoteForm(forms.Form): id = Oogiri_home.objects.order_by('-created_at').first() if id: CHOICES = [(ch.id, ch.answer) for ch in Oogiri_user.objects.filter(title_id=id.id)] your_choice = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect()) def save(self): choice_id = self.cleaned_data.get('your_choice') selected_choice = Oogiri_user.objects.get(pk=choice_id) selected_choice.score += 1 selected_choice.save()

###追記(vote.html)

{% block header%} <header class="masthead text-center text-white"> <div class="masthead-content"> <div class="container"> <p>お題</p> <h1 class="masthead-heading mb-0"> {{ question.title }} </h1> <h3 class="post-subtitle"> 作成者{{ question.user }} </h3> </div> </div> </header> {% endblock %} {% block contents %} <div class="container"> <div class="row"> <div class="my-div-style w-100"> <form action="{% url 'oogiri_home:vote' %}" method="post"> {% csrf_token %} {{ form.as_p }} <button class="btn btn-primary" type="submit">投票</button> </form> </div> </div> </div> {% endblock %}

補足情報

コードの量が多いので追加したほうが良いコードがありましたら、コメントよろしくお願いします。

###新たな発見
views.pyのvote_viewに

CHOICES = [(ch.id, ch.answer) for ch in Oogiri_user.objects.filter(title_id=id.id)]

を追加しvote.htmlにも

{{ choice }}

を追加してrunserverしてみると
イメージ説明
画像のように選択肢にはないがデータベースからの表示はできている。

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

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

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

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

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

tatamyiwathy

2020/12/26 05:46

voto.htmlを提示していただけないでしょうか
DR.py

2020/12/26 06:50

コメントありがとうございます。 追加しましたので、拝見の方よろしくお願いします。
tatamyiwathy

2020/12/26 15:07

url 'oogiri_home:vote'はvote_viewのurlですか?
DR.py

2020/12/28 09:44

返信遅れてしまい、本当に申し訳ございません。 ’oogiri_home:vote’は’oogiri_home/urls.py’の中の’path('vote/', views.vote_view, name='vote')’なのでvote_viewのurlだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問