2017-01-24 29 views
0

このエラーは非常に奇妙です。私は形式を持っています:MultiValueDictKeyError Django ModelForm

class ProfileForm(forms.ModelForm): 
class Meta: 
    model = Profile 
    fields = ['first_name', 'last_name', 'description', 'gender', 'language', 
    ] 
    widgets = { 
     'language': forms.RadioSelect, 
    } 

ご覧のとおり、言語はラジオボタン方式を使用しています。その後、私のmodels.pyに、私はそうのような言語のためのフィールドを指定します。次に

LANGUAGE = (('AR', 'Arabic'), ('FR', 'French'), ('ES', 'Spanish')) 
language = models.CharField(max_length=20, choices=LANGUAGE, blank=False, default=None) 

を私views.pyで、私はこのようなものがあります:私は、エントリを選択した場合、フォームのだから、

if request.method == "POST": 
     # Model 
     first_name = request.POST['first_name'] 
     last_name = request.POST['last_name'] 
     gender = request.POST['gender'] 
     language = request.POST['language'] 

     Profile.objects.create(
        first_name=first_name, 
        last_name=last_name, 
        description=description, 
        gender=gender, 
        language=language, 
     ) 

languageの場合、それはすべて正常に動作します。しかし、languageフィールドを空のままにしておくと(私は何も選択しません)、それは私にMultiValueDictKeyErrorを与えます。ここで

はトレースバックです:

Traceback: 

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/Users/andyxu/Documents/ece496-web/matchalgorithm/views.py" in forms 
    31.   language = request.POST['language'] 

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/datastructures.py" in __getitem__ 
    85.    raise MultiValueDictKeyError(repr(key)) 

Exception Type: MultiValueDictKeyError at /matchalgorithm/forms/ 
Exception Value: "'language'" 
+0

[私はそれに対処しますかジャンゴMultiValueDictKeyErrorエラー、]の可能な重複(http://stackoverflow.com/questions/5895588/django-multivaluedictkeyerror-error-how-do-i-deal-with-それ) –

答えて

3

あなたが直接request.POSTにアクセスするべきではありません。フォームの要点は、これをあなたのために扱うことです。そのため、form.is_valid()を確認してform.cleaned_data['whatever']にアクセスしてください。

実際には、フォームの保存メソッドを呼び出すことができるので、実際にはそのようにする必要はありません。

if request.method == "POST": 
    form = ProfileForm(request.POST) 
    if form.is_valid(): 
     profile = form.save(commit=False) 
     profile.user = request.user 
     profile.save() 
+0

クールだが、今私はこの 'IntegrityError:カラム" user_id "のヌル値がnullでない制約に違反している"と私はいくつかの研究を行うだろうが、あなたもアイデアがあるかどうか疑問に思っていた? – anderish

+0

あなたはどこから来たがりますか? –

+0

'auth_user'から、私はuser_idを外部キーにします。 – anderish

関連する問題