コードは次のとおりです。
...
class Meta:
model = Card
def clean_video_url(self):
video_url = self.cleaned_data['video_url']
if video_url != '' and len(video_url) != YOUTUBE_VIDEO_URL_LENGTH:
pos = string.find(video_url, YOUTUBE_VIDEO_URL_IDENTIFIER)
identifier_length = len(YOUTUBE_VIDEO_URL_IDENTIFIER)
if pos == -1:
raise forms.ValidationError(_('youtube-url-not-valid'))
video_url = video_url[pos+identifier_length:pos+identifier_length+YOUTUBE_VIDEO_URL_LENGTH]
return video_url
...
def clean(self):
video_url = self.cleaned_data['video_url']
field1 = self.cleaned_data['field1']
if video_url == '' and field1 == '':
raise forms.ValidationError(_('must-fill-video-url-or-front'))
return self.cleaned_data
最も厄介なのは、ほとんどすべての状況で機能する(データベースに送信して保持する)ことです。video_urlフィールドに「aeuchah」のようなダミーテキストを書き込むと機能しませんが、代わりに次のようにスローされます。
Exception Type: KeyError
Exception Value:
'video_url'
clean_video_urlメソッドを読み直し、pdb.set_traceなどのデバッグツールを使用して変数が何であるかを確認しましたが、問題を見つけることができません。
更新:MariusGrigaitisとDavideR.が言ったように、すべての個々のフィールドメソッドが実行された後にcleanメソッドが呼び出されます。clean_video_urlはValidationErrorを発生させて何も返さなかったため、cleanメソッドは動作するものを何も検出せずにKeyErrorを発生させました。