2017-07-26 31 views
0

有効な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) 

答えて

2

request方法がPOSTあるときあなたは、else句のうちの

def profile_setup(request): 
    if 'username' not in request.session: 
     return redirect('login') 
    else: 
     username = request.session['username'] 
     currentUser = User.objects.get(username = username) 
     message = None 
     if request.method == 'POST': 
      form = ProfileForm(request.POST) 
      ...... 
     else: 
      form = ProfileForm() 
      message = 'fill out form below' 
     #<== 
     parameters = { 
      'form':form, 
      'currentUser':currentUser, 
      'message':message, 
     } 
    return render(request, 'tabs/profile_setup.html', parameters) 

をごparameters変数を移動する必要があり、else句が実行されていない、すなわち、エラーが発生します。

+0

これは私が抱えている問題ではありません。問題は、フォームが有効ではないということです。投稿の更新されたセクションを見て、問題があるかどうか、どうすればその問題を解決できるかを知ることができました。 @zaidfazil –

+0

私はそれを決して気にかけなかった –

関連する問題