2016-05-17 12 views
0

自分のモデルフォームをカスタム検証しようとしています。私はのようなエラーを取得していますdjangoのモデルフォームでエラーオブジェクトの取得に 'get'属性がありません

class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = '__all__' 

    def clean(self): 

     batch_start_year = self.cleaned_data.get('batch_start_year',None) 

:目的のために、私は次のコードを書いた

'StudentForm' object has no attribute 'get' 

私は別の解決策を試してみましたが、それはどちらか動作しませんでした。

class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = '__all__' 

    def clean(self): 
     cleaned_data = super(StudentForm, self).clean() 

     batch_start_year = cleaned_data['batch_start_year'] 

これを解決するのを手伝ってください。

のフルスタックトレース:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/shahjahan/Desktop/jmialumniusa/jmialumniusa_app/views.py", line 18, in apply 
    if form.is_valid(): 
    File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py", line 161, in is_valid 
    return self.is_bound and not self.errors 
    File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py", line 153, in errors 
    self.full_clean() 
    File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py", line 364, in full_clean 
    self._post_clean() 
    File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 377, in _post_clean 
    exclude = self._get_validation_exclusions() 
    File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 337, in _get_validation_exclusions 
    field_value = self.cleaned_data.get(field) 
AttributeError: 'StudentForm' object has no attribute 'get' 
+0

完全なスタックトレースを投稿してください。 – AKS

+0

私は自分の質問を編集しました。ありがとう。 – learner

+0

上記の両方の方法で同じエラーが発生しましたか? –

答えて

0

あなたはclean()方法からクリーンデータを返すか、エラーを発生させる必要があります。あなたはそれをやっていません。すべてのあなたのフォームを確認したい場合は、この場合、この

class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = '__all__' 

    def clean(self): 
     cleaned_data = super(StudentForm, self).clean() 
     batch_start_year = cleaned_data.get('batch_start_year') 

のようにきれいな方法を使用することができます

class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = '__all__' 

    def clean(self): 
     batch_start_year = self.cleaned_data.get('batch_start_year',None) 
     # do something 
     return self.cleaned_data 
0

、あなたは何を返す必要はありません。検証エラーが発生します。あなたには、いくつかの特定のフィールドを検証したい場合は、エラーの別の可能性は、フォームの最初の引数あなたのフォームにデータを送信する方法

student = Student.objects.get(pk=id) 
form = StudentForm(intention) # An unbound form 

することができ、この

def clean_field_name(self): 
    data = self.cleaned_data.get('field_name') 
    if "something" not in data: 
     raise forms.ValidationError("Validation message") 

    # Always return the cleaned data, whether you have changed it or 
    # not. 
    return data 

のようにそれを行いますデータですが、インスタンスを渡しています。インスタンスを正しく渡すには、次のものを使用してください。

student = Student.objects.get(pk=id) 
form = StudentForm(instance=student) # 
関連する問題