有効なdjangoのフォームがありますが、grabbin gthe cleaned_dataより前に検証しようとすると、エラーが発生して、なぜそれが起こっているのかわかりません。ここで有効なフォームはdjangoで有効ではありません
def profile_setup(request):
if 'username' not in request.session:
return redirect('login')
else:
username = request.session['username']
currentUser = User.objects.get(username = username)
if request.method == 'POST':
form = ProfileForm(request.POST)
print(form)
if form.is_valid():
cd = form.cleaned_data
age = cd['age']
print(age)
city = cd['city']
print(city)
phone = cd['phone']
print(phone)
privacy = cd['privacy']
print(privacy)
new_profile = Profile.objects.create(
user = currentUser,
age = age,
city = city,
phone = phone,
privacy = privacy,
)
return redirect('accounts')
else:
form = ProfileForm()
message = 'fill out form below'
parameters = {
'form':form,
'currentUser':currentUser,
'message':message,
}
return render(request, 'tabs/profile_setup.html', parameters)
:誰かが私はそれを把握することができます。..ここ
がview.py方法です..私はそれは小さなものです感じていますが、私はコーダーをブロックし、それを見ることはできません取得していますhtmlです:ここで{% extends "base.html" %}
{% block content %}
<h1>Setup you profile: {{ currentUser.username }}</h1>
{% if message %}
{{ message }}
{% endif %}
<form action="." method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit" value="submit">
</form>
{% endblock %}
は、私は、ブラウザから取得していますものです:
UnboundLocalError at /setup_profile/
local variable 'parameters' referenced before assignment
Request Method: POST
Request URL: http://127.0.0.1:8000/setup_profile/
Django Version: 1.8.6
Exception Type: UnboundLocalError
Exception Value:
local variable 'parameters' referenced before assignment
Exception Location: C:\Users\OmarJandali\Desktop\opentab\opentab\tab\views.py in profile_setup, line 153
Python Executable: C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\python.exe
Python Version: 3.6.1
Python Path:
['C:\\Users\\OmarJandali\\Desktop\\opentab\\opentab',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
Server time: Wed, 26 Jul 2017 05:56:29 +0000
Traceback Switch to copy-and-paste view
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
C:\Users\OmarJandali\Desktop\opentab\opentab\tab\views.py in profile_setup
return render(request, 'tabs/profile_setup.html', parameters) ...
▶ Local vars
Request information
GET
No GET data
POST
Variable Value
csrfmiddlewaretoken
'EpPxClvN9jWbFQGqV3lhWnoIC53g0ny4'
age
'22'
city
'riverside'
phone
'232414'
privacy
'1'
submit
'submit'
すべてが通過していますそしてそれは、最初のprint文でフォームを印刷している
...有効ですが、そこにIS_VALID部分との誤差があるが、私はそれを把握することはできませんことを意味した後に何もない...
更新
エラーが表示されていました。私がmodels.pyファイルで持っていた選択肢のセクションでした。私はそれを修正するために何をしましたか、私は選択肢やオプションをteh models.pyファイルに設定せず、forms.pyファイルにオプションを追加しました。これはモデルではなくフォームに追加されました。私のコードは...今のように見える
models.pyファイル
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE) # server
age = models.IntegerField(default=0)
city = models.CharField(max_length=45) # user
phone = models.BigIntegerField(default=0) # user
privacy = models.SmallIntegerField(default=1) # user
created = models.DateTimeField(auto_now_add=True) # server
forms.pyファイル:
class ProfileForm(forms.ModelForm):
split_choices = (('1', 'public'),
('2', 'private'))
privacy = forms.TypedChoiceField(
choices=split_choices, widget=forms.RadioSelect, coerce=int
)
class Meta:
model = Profile
fields = ['age', 'city', 'phone', 'privacy']
views.pyファイル:
def profile_setup(request):
if 'username' not in request.session:
return redirect('login')
else:
username = request.session['username']
currentUser = User.objects.get(username = username)
if request.method == 'POST':
form = ProfileForm(request.POST)
print(form)
if form.is_valid():
cd = form.cleaned_data
age = cd['age']
print(age)
city = cd['city']
print(city)
phone = cd['phone']
print(phone)
privacy = cd['privacy']
print(privacy)
new_profile = Profile.objects.create(
user = currentUser,
age = age,
city = city,
phone = phone,
privacy = privacy,
)
return redirect('accounts')
else:
form = ProfileForm()
message = 'fill out form below'
parameters = {
'form':form,
'currentUser':currentUser,
'message':message,
}
return render(request, 'tabs/profile_setup.html', parameters)
これは私が抱えている問題ではありません。問題は、フォームが有効ではないということです。投稿の更新されたセクションを見て、問題があるかどうか、どうすればその問題を解決できるかを知ることができました。 @zaidfazil –
私はそれを決して気にかけなかった –