簡単な例 - クエリセットで始まる Django コードが少しあります...
queryset = MyModel.objects.all()
後で、いくつかの構成可能なオプションに応じて、さまざまなフィルタリングを実行します...
if something:
queryset = self.queryset.filter(foo=some_foo)
if another_thing:
queryset = self.queryset.filter(bar=some_bar)
そして最後にルックアップを実行します...
try:
obj = queryset.get()
except ObjectDoesNotExist:
raise ValidationError('Does not exist')
ここで、フィルタリングを行う必要がある柔軟な方法により、変数some_foo
またはsome_bar
変数が正しいタイプではない可能性があります (たとえば、整数フィールドに対してフィルタリングしようとすると、空の文字列になる可能性があります)。このコードが aTypeError
または aを上げることになりValueError
ます。
それは問題ありません。ケースを適切に処理できますが、ORM コントラクトから明らかでないのは、これらの例外がどの時点で発生することを期待すべきかということです。
- 明細書上で発生するの
.filter()
でしょうか? ... - ...または
.get()
ステートメントで?... - ...または指定不足であり、どちらでも発生する可能性があるとして処理しますか? (例えば、おそらくデータベース バックエンドの実装に依存しますか?)