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

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

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

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

Python

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

Q&A

解決済

1回答

740閲覧

画像ModelFormを使いデータをDBに保存したいです。

Mitsu_

総合スコア10

Django

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

Python

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

0グッド

0クリップ

投稿2021/05/07 03:18

編集2021/05/07 10:04

前提・実現したいこと

ModelFormを使いDBにデータを保存したいのですが、保存されなく困っております。
エラーメッセージは出ておりません。
どうぞよろしくお願い申し上げます。

該当のソースコード

regist.html

<form class="row m-5" method="POST"> {%csrf_token%} <i class="far fa-registered text-center fa-6x"></i> <h1 class="h3 mb-3 fw-normal text-center mt-3">Please Regist</h1> <p class="h3 mb-3 fw-normal text-center mt-3"style="color:red;" >{{form.non_field_errors}}</p> {% if form.errors %} {% for key, value in form.error.items %} {% if key != '__all__' %} <p>{{key}}: {{value.as_text}}</p> {% endif %} {%endfor%} {% endif %} <div class="col-12"> <label for="inputEmail4" class="form-label">{{form.email.label}}</label> {{form.email | add_class:"form-control"}} </div> <div class="col-12"> <label for="inputEmail4" class="form-label">{{form.username.label}}</label> {{form.username | add_class:"form-control"}} </div> <div class="col-md-6 mt-3"> <label for="inputPassword4" class="form-label">{{form.password.label}}</label> {{form.password | add_class:"form-control"}} </div> <div class="col-md-6 mt-3"> <label for="inputPassword4" class="form-label">{{form.confirm_password.label}}</label> {{form.confirm_password | add_class:"form-control"}} </div> <div class="col-12 mt-4"> <label for="inputPassword4" class="form-label">{{form.grade.label}}</label> {{form.grade | add_class:"form-select"}} </div> <div class="col-12 mt-3"> <label for="inputAddress" class="form-label">{{form.student_num.label}}</label> {{form.username | add_class:"form-control"}} </div> <div class="col-12 mt-3"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="gridCheck"> <label class="form-check-label" for="gridCheck"> Check me out </label> </div> </div> <div class="col-12 mt-5"> <!-- <button type="submit" class="btn btn-primary">Register</button> --> <input type="submit" class="btn btn-primary" value="Register"> </div> </form>

forms.py

class

1 email = forms.EmailField(label='Email') 2 username = forms.CharField(label='Your Name') 3 password = forms.CharField(label='Password' ,max_length=20, widget=forms.PasswordInput()) 4 confirm_password = forms.CharField(label='Confirm Password', max_length=20, widget=forms.PasswordInput()) 5 grade = forms.ChoiceField(label='Grade', choices=( 6 ('学部1年生', '学部1年生'), 7 ('学部2年生', '学部2年生'), 8 ('学部3年生', '学部3年生'), 9 ('学部4年生', '学部4年生'), 10 ('院生1年生', '院生1年生'), 11 ('院生2年生', '院生2年生'), 12 )) 13 student_num = forms.CharField(label='Students Number', min_length=7) 14 15 class Meta: 16 model = RegistModel 17 fields='__all__' 18 19 def clean(self): 20 cleaned_data = super().clean() 21 password = cleaned_data.get('password') 22 confirm_password = cleaned_data.get('confirm_password') 23 if password != confirm_password: 24 raise validators.ValidationError('パスワードが一致しません')

views.py

def

1 form = forms.RegistModelForm() 2 if request.method =='POST': 3 form = forms.RegistModelForm(request.POST) 4 if form.is_valid(): 5 print(form.cleaned_data) 6 form.save() 7 return render(request, 'regist.html', context={'form':form})

models.py

class

1 email = models.EmailField(max_length=30, unique=True) 2 username = models.CharField(max_length=30, unique=True) 3 password = models.CharField(max_length=30,) 4 confirm_password = models.CharField(max_length=30,) 5 grade = models.CharField(max_length=20) 6 student_num = models.CharField(max_length=8) 7 8 class Meta: 9 db_table='regist_user' 10 11 def __str__(self): 12 return self.username

urls.py

from django.urls import path from .views import contact, products_home, regist_form app_name='SellText' urlpatterns = [ path('products/', products_home, name='products'), path('home/', contact, name='contact'), path('regist_form/', regist_form, name='regist_form'), ]

イメージ説明
どうぞよろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/07 03:51

こんにちは。 問題を読ませていただきました。 問題の切り分けが難しいため、以下のことを試していただけますか? 1. サーバーを起動する。(https://qiita.com/wwacky/items/efcdfc7967faad69c17b) 2. Chromeにてブラウザ表示する。 3. こちらのリンクをしっかりと読んでください。(https://liginc.co.jp/449322 ) 4. regist/ページへアクセスして、 Google Developer Toolsを開く。フォームを送信する。 5. Google Developer ToolsのNetworkタブへ移動して、フォーム送信された情報を確認する。
Mitsu_

2021/05/07 07:30

お世話になります。 只今、画像をアップいたしましたので、どうぞよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/05/07 09:36 編集

うーん、難しいですね。 いくつか試して欲しいです。 1. homeのURLにエントリーした時にもDB更新やDB情報取得などはできないのか? 2. formにaction要素がついていないのですが、適切な箇所に本当にPOSTされているのか?(if request.method =='POST':のところに入って欲しいと想定しているので、ここに入ってきているのか?) 3. formでPOSTされたときに、printとexit()を駆使してどこまでのコードが動いているのかGoogle Developer Tools見つつ進めて欲しいです。。
Mitsu_

2021/05/07 10:01

お世話になっております。 actionを追加してみたのですが、だめでした。 <form class="row m-5" action="{% url 'SellText:regist_form' %}" method="POST"> views.pyに def regist_form(request): form = forms.RegistModelForm() if request.method =='POST': form = forms.RegistModelForm(request.POST) if form.is_valid(): print(form.cleaned_data) form.save() return render(request, 'regist.html', context={'form':form}) print関数を入れているのですが、ターミナルに表示されないため、viewに届いていないようです。 よろしくお願いいたします。
Mitsu_

2021/05/07 10:07

解決いたしました VScodeのWindowを複数開いており、それを閉じたらできました。 誠にありがとうございます。
Mitsu_

2021/05/07 10:08

ベストアンサーに選びたいのですが、回答をつけていただいてもよろしいでしょうか? どうぞよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/05/07 11:14

お、自己解決ナイスです!! 回答させていただきました。 コードの保存がうまくいっていなかったのかな?できて本当によかった〜。 またわからないことがありましたら、相談してください。 Enjoy!!!
guest

回答1

0

ベストアンサー

こんにちは。

問題を読ませていただきました。

問題の切り分けが難しいため、以下のことを試していただけますか?

  1. サーバーを起動する。(https://qiita.com/wwacky/items/efcdfc7967faad69c17b)
  2. Chromeにてブラウザ表示する。
  3. こちらのリンクをしっかりと読んでください。(https://liginc.co.jp/449322 )
  4. regist/ページへアクセスして、 Google Developer Toolsを開く。フォームを送信する。
  5. Google Developer ToolsのNetworkタブへ移動して、フォーム送信された情報を確認する。

<追記文>

いくつか試して欲しいです。

  1. homeのURLにエントリーした時にもDB更新やDB情報取得などはできないのか?
  2. formにaction要素がついていないのですが、適切な箇所に本当にPOSTされているのか?(if request.method =='POST':のところに入って欲しいと想定しているので、ここに入ってきているのか?)
  3. formでPOSTされたときに、printとexit()を駆使してどこまでのコードが動いているのかGoogle Developer Tools見つつ進めて欲しいです。。

投稿2021/05/07 11:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Mitsu_

2021/05/07 11:14

この度は誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問