前提・実現したいこと
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'), ]
こんにちは。
問題を読ませていただきました。
問題の切り分けが難しいため、以下のことを試していただけますか?
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見つつ進めて欲しいです。。
お世話になっております。
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に届いていないようです。
よろしくお願いいたします。
解決いたしました
VScodeのWindowを複数開いており、それを閉じたらできました。
誠にありがとうございます。
ベストアンサーに選びたいのですが、回答をつけていただいてもよろしいでしょうか?
どうぞよろしくお願いいたします。
お、自己解決ナイスです!!
回答させていただきました。
コードの保存がうまくいっていなかったのかな?できて本当によかった〜。
またわからないことがありましたら、相談してください。
Enjoy!!!
回答1件
あなたの回答
tips
プレビュー