Django _get_queryset(klass)メソッドに似たものの開発に問題があります。QuerySetまたはmongoengine Documentのいずれかが提供されている場合、QuerySetをプルしようとしています。私は次のロジックを試しました:
from mongoengine.base import BaseDocument
from mongoengine.queryset import QuerySet
def _get_queryset(klass):
if isinstance(klass, QuerySet):
return klass
if isinstance(klass, BaseDocument):
return klass.objects
else:
raise ValueError
次のような特定のドキュメントの場合:
class Monkey(mongoengine.Document):
name = mongoengine.StringField(unique=True)
以下をpythonのに渡すとis_instance()
>>> isinstance(db.Monkey.objects, QuerySet)
True
しかし(一見)驚くべきことに、
>>> isinstance(Monkey, BaseDocument)
False
>>> isinstance(Monkey(), BaseDocument)
True
isinstance()
提示されたときにクラスをインスタンス化しませんか? Django では、ほぼ同等の呼び出しが機能します。
>>> isinstance(Monkey, ModelBase)
True
Monkey
ここで Django ではインスタンス化されるのに、上記の mongoengine バージョンではインスタンス化されないのはなぜですか?