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

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

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

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

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

2430閲覧

Djangoのフォームで書いた内容が反映されない(POSTされない)

Murasaki_PurPle

総合スコア37

Django

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

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/13 09:20

編集2020/09/21 16:23

Djangoのフォームで書いた内容が反映されない

Djangoでブログを作成しています。ブログの作成画面をCreateViewを継承したクラスビューで実現しようとしているのですが、うまくいかずに困っています。

###環境・前提
Django 3.1.1
pycharm
postgreSQL

書いたコード

urls.py

python

1from django.contrib import admin 2from django.urls import path, include 3from django.contrib.staticfiles.urls import static 4 5from . import settings 6 7urlpatterns = [ 8 path("", include("QuantumGun.urls")), 9] 10 11#開発サーバーでメディアを配信できるように設定 12urlpatterns += static( 13 settings.MEDIA_URL, 14 document_root=settings.MEDIA_ROOT 15) 16

QuantumGun.urls.py

python

1from django.urls import path 2from django.contrib import admin 3from .views import Entrance, About, Contact, BlogList, BlogDetail, BlogCreate, formfunc 4 5urlpatterns = [ 6 #管理画面 7 path('admin/', admin.site.urls), 8 9 #メインルートとは独立したページ 10 path("create/", BlogCreate.as_view(), name="create"), 11 12 #Entrance画面と直接つながってるページ 13 path("", Entrance.as_view(), name="Entrance"), 14 path("about/", About.as_view(), name="about"), 15 path("contact/", Contact.as_view(), name="contact"), 16 path("blog", BlogList.as_view(), name="blog"), 17 18 #更に1階層下へ 19 path("detail/<int:pk>/", BlogDetail, name='detail') 20]

QuantumGun.views.py

python

1from django.views.generic import TemplateView, ListView, DetailView, CreateView 2from django.shortcuts import render, redirect 3from .forms import DiaryCreateForm 4from django.urls import reverse_lazy 5from django.contrib import messages 6 7from .models import BlogModel4 8 9 10# Create your views here. 11class Entrance(TemplateView): 12 template_name = "Entrance.html" 13 14class Contact(TemplateView): 15 template_name = "contact.html" 16 17class About(TemplateView): 18 template_name = "about.html" 19 20class Blog(TemplateView): 21 template_name = "index.html" 22 23class BlogList(ListView): 24 template_name = "BlogList.html" 25 model = BlogModel4 26 27class BlogDetail2(DetailView): 28 template_name = "BlogDetail.html" 29 model = BlogModel4 30 print("HelloWorld") 31 32def BlogDetail(request, pk): 33 object=BlogModel4.objects.get(pk=pk) 34 print("Hello") 35 print(object.pageView) 36 37 object.pageView+=1 38 object.save() 39 40 return render(request, "BlogDetail.html", {"object": object}) 41 42class BlogCreate(CreateView): 43 model = BlogModel4 44 template_name = "diary_create.html" 45 form_class = DiaryCreateForm 46 success_url = reverse_lazy("blog") 47 print("KKKKKKKKKKK") 48 49 def form_valid(self, form): 50 diary = form.save(commit=False) 51 diary.user = self.reqest.user 52 diary.save() 53 messages.success(self.request, "Create Diary") 54 return super().form_valid(form) 55 56 def form_invalid(self, form): 57 messages.error(self.request, "You can't create Blog") 58 return super().form_invalid(form)

QuantumGun.model.py

python

1from django.db import models 2 3# Create your models here. 4CATEGORY = ( 5 ("python", "python"), 6 ("Django", "Django"), 7 ("FIRE", "FIRE"), 8 ("html/css", "html/css"), 9 ("数学", "数学"), 10 ("物理", "物理"), 11 ("データサイエンス", "データサイエンス") 12) 13 14class BlogModel4(models.Model): 15 title = models.CharField(max_length=100) 16 contentDescription = models.TextField(max_length=150) 17 postdate = models.DateField(auto_now_add=True) 18 updateDate = models.DateField(auto_now=True) 19 category = models.CharField( 20 max_length=50, 21 choices=CATEGORY 22 ) 23 SmallCategory = models.CharField( 24 max_length=50, 25 choices=CATEGORY 26 ) 27 eyeCatch = models.ImageField( 28 verbose_name="アイキャッチ画像", 29 blank=True, 30 null=True 31 ) 32 pageView = models.PositiveIntegerField(default=0) 33 content = models.TextField() 34 35 def __str__(self): 36 return self.title

QuantumGun.forms.py

python

1from .models import BlogModel4 2from django import forms 3 4class DiaryCreateForm(forms.ModelForm): 5 6 class Meta: 7 model = BlogModel4 8 fields = ( 9 "title", 10 "contentDescription", 11 "category", 12 "SmallCategory", 13 "eyeCatch", 14 "pageView", 15 "content" 16 ) 17 def __init__(self, *args, **kwargs): 18 super().__init__(*args, **kwargs) 19 for field in self.fieldsfile:/Users/ilovephys/Desktop/purple2/purpleDiary/QuantumGun/templates/diary_create.html.values(): 20 field.widget.attrs["class"] = "form-control"

QuantumGun.Templates.diary_create.html

html

1{% extends "diaryBase.html" %} 2 3{% load static %} 4 5{% block title %} 6 {{ object.title }} 7{% endblock %} 8{% block titleContsnts %} 9 <div class="title"> 10 <h1>Blog Create</h1> 11 <div class="genre"> 12 <span>Admin</span> 13 <span>Murasaki PurPle</span> 14 </div> 15 </div> 16{% endblock %} 17 18{% block eyeCatchPic %} 19 <img class="eyeCatchPic" src="{% static 'img/koke.jpg' %}"> 20{% endblock %} 21 22 23{% block contentsIndex %} 24 25{% endblock %} 26 27{% block contentsSection %} 28 <form method="POST" enctype="multipart/form-data"> {% csrf_token %} 29 <table class="table"> 30 {{ form.as_table }} 31 </table> 32 <button type="submit">create</button> 33 </form> 34{% endblock %} 35 36{% block reverse %} 37 {% url 'blog' %} 38{% endblock %}

結果

http://127.0.0.1:8000/create
にアクセスしました。
QuantumGun.forms.py
で書いたように、ブラウザ上に必要な項目が全て表示されています。
http://127.0.0.1:8000/create

画像の下にあるボタン[create]を押すと、
QuantumGun.views.py

success_url = reverse_lazy("blog")

に従い
http://127.0.0.1:8000/blog
に遷移します。以下が遷移した時の画像です。
遷移後
QuantumGun.forms.py
で記述した物が反映されていません。

試したこと

クラスベースビューではなく、関数ベースビューでも試してみましたが 結果は変わりませんでした。

def formfunc(request): if request.method == 'POST': form = DiaryCreateForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.save() return redirect('blog') else: form = DiaryCreateForm() return render(request, 'diary_create.html', {'form': form})

いつもありがとうございます

teratailで質問すると、いつも親切な回答をいただきます。
本当に助かっております。
今回も、お力を貸していただけないでしょうか。

追加で試したこと2020/9/22

関数ベースビューで実行し、途中でprint()を挟んでどのように動作したのか確認しました。

QuantumGun.view.py

python

1def formfunc(request): 2 print("aaa") 3 if request.method == 'POST': 4 print("POST") 5 form = DiaryCreateForm(request.POST) 6 if form.is_valid(): 7 post = form.save(commit=False) 8 post.author = request.user 9 post.save() 10 print("redirect") 11 return redirect('BlogList') 12 else: 13 print("nothing") 14 15 else: 16 form = DiaryCreateForm() 17 print("新規の空フォームを生成") 18 return render(request, 'diary_create.html', {'form': form})

これで、/createに入った場合 terminal上では

terminal

12020-09-22 00:58:58,134¥t[INFO]¥t/Users/××/Desktop/purple2/lib/python3.6/site-packages/django/core/servers/basehttp.py(Line:157)¥t"GET / HTTP/1.1" 200 2489 2aaa 3新規の空フォームを生成

のように表示されるはずです(なりました)。
フォームに必要事項を記載し「createボタン」を押せば、viewの最初のif文が実行され

terminal

1POST 2redirect

と表示されるはずです。しかし、表示されませんでした。さらにおかしなことに、QuantumGun.view.pyにおける「BlogListに遷移する部分が実行されていないにもかかわらず」"BlogList"に画面が遷移してしまいました。
遷移がおかしい

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

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

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

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

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

hasami

2020/09/14 09:29

登録しようとしたデータは、データベースに記録されているのでしょうか?
Murasaki_PurPle

2020/09/14 14:20

hasamiさん 確認いたしました。 どうやらデータベースに追加されていないようです。 この場合の設定方法がわかりません。ご教示いただけると嬉しいです。
hasami

2020/09/14 23:54

テンプレートに、{{ form.errors }}を追加して、発生しているエラーを確認してみてください。
Murasaki_PurPle

2020/09/18 15:37

<form>内に{{ form.errors }}を追加しましたが、何も起こりませんでした。
Murasaki_PurPle

2020/09/21 16:14

何も変化が起こりませんでした。申し訳ございません。 上記の質問を修正いたしました。どうやら、フォームの送信ボタンを押した時、フォームのViewが実行されていないようです。 やはり原因がわかりません。お忙しい中恐縮ですが、アドバイスをいただけないでしょうか...
nuts3745

2020/09/24 03:36 編集

form.save(commit=False) を form.save() にするとどうなりますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問