Django DoesNotExist
はdb.models.fields.related.py
のように発生します。Django.core.exceptions
で定義されているObjectDoesNotExist
ではなく、常にDoesNotExist
だけです。この例外クラスはどこで定義されていますか、または例外を完全に理解していませんか?例外ではないことを確認しました(少なくとも私が知っていることではありません)。明らかに混乱しています。
注: `self.someforeignkey.DoesNotExistのように、モデルサブクラスインスタンスの属性として無料で提供されます。これはどのように可能ですか?
DoesNotExist
は文書化されています ここ :
DoesNotExist例外はDjango.core.exceptions.ObjectDoesNotExistを継承するため、複数のDoesNotExist例外をターゲットにすることができます。
したがって、except ObjectDoesNotExist:
を完全に使用して、DoesNotExist
句で発生する可能性のあるモデル固有のtry
例外をすべてキャッチするか、必要に応じてexcept SomeSpecificModel.DoesNotExist:
を使用できます。具体的に。
この属性がモデルクラスに追加されるDjangoのソースコード内の特定の場所を探している場合は、 ここ 、34〜37行目を参照してください。
# Create the class.
new_class = type.__new__(cls, name, bases, {'__module__': attrs.pop('__module__')})
new_class.add_to_class('_meta', Options(attrs.pop('Meta', None)))
new_class.add_to_class('DoesNotExist', types.ClassType('DoesNotExist', (ObjectDoesNotExist,), {}))
DoesNotExist
は、MultipleObjectsReturned
と同様に、モデルクラスの属性です。モデルの生成時にモデルに追加されます。
編集:このプロセスを担当するメタクラスはModelBase
(Django.db.models.base
)そしてあなたはそれを見て何が起こっているのか見るかもしれません。