我在开发类似于 Django _get_queryset(klass)方法的东西时遇到问题。当提供 QuerySet 或 mongoengine 文档时,我正在尝试提取 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)
如果我将以下内容传递给pythonis_instance()
>>> isinstance(db.Monkey.objects, QuerySet)
True
但是(似乎)令人惊讶的是,
>>> isinstance(Monkey, BaseDocument)
False
>>> isinstance(Monkey(), BaseDocument)
True
isinstance()
呈现类时不实例化它吗?在 Django 中,一个大致等效的调用起作用:
>>> isinstance(Monkey, ModelBase)
True
为什么Monkey
在 Django 中在这里实例化,但在上面的 mongoengine 版本中却没有?