Python django 1.7中的独立mongoengine模型

Python django 1.7中的独立mongoengine模型,python,django,mongoengine,Python,Django,Mongoengine,我正在使用django 1.7和mongoengine。我想把我的模型分成几个文件。对于django模型,没有问题。但是,使用mongoengine文档,无法理解如何完成此任务,并且仍然可以访问django管理员。其中一个问题是mongoengine\u meta不支持app\u标签。使用django admin保持这些模型工作的唯一方法是将mongoengine文档保存在models/init.py中。因为我有几个模型,所以我想要另一种方法 Environment: Request

我正在使用django 1.7和mongoengine。我想把我的模型分成几个文件。对于django模型,没有问题。但是,使用mongoengine文档,无法理解如何完成此任务,并且仍然可以访问django管理员。其中一个问题是mongoengine\u meta不支持app\u标签。使用django admin保持这些模型工作的唯一方法是将mongoengine文档保存在models/init.py中。因为我有几个模型,所以我想要另一种方法

Environment: Request Method: GET Request URL: http://127.0.0.1:4080/admin/ Django Version: 1.7 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'account', 'mongoadmin', 'grappelli', 'django.contrib.admin', 'rest_framework', 'notifications', 'django_extensions', 'debug_toolbar_mongo', 'autos',) Installed Middleware: ('django.middleware.gzip.GZipMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'account.middleware.LocaleMiddleware', 'account.middleware.TimezoneMiddleware') Traceback: File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in wrapper 225. return self.admin_view(view, cacheable)(*args, **kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 105. response = view_func(request, *args, **kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 204. return view(request, *args, **kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in index 399. 'name': apps.get_app_config(app_label).verbose_name, File "/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site-packages/django/apps/registry.py" in get_app_config 150. raise LookupError("No installed app with label '%s'." % app_label) Exception Type: LookupError at /admin/ Exception Value: No installed app with label 'models'. 环境: 请求方法:获取 请求URL:http://127.0.0.1:4080/admin/ Django版本:1.7 Python版本:2.7.3 已安装的应用程序: (“django.contrib.auth”, “django.contrib.contenttypes”, “django.contrib.sessions”, “django.contrib.sites”, “django.contrib.messages”, “django.contrib.staticfiles”, “账户”, “mongoadmin”, "抓斗",, “django.contrib.admin”, “rest_框架”, “通知”, “django_扩展”, “debug_toolbar_mongo”, ‘汽车’,) 已安装的中间件: ('django.middleware.gzip.GZipMiddleware', 'django.middleware.common.CommonMiddleware', “django.contrib.sessions.middleware.SessionMiddleware”, “django.middleware.csrf.CsrfViewMiddleware”, 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.xFrameOptions中间件', 'account.middleware.localemidleware', 'account.middleware.TimezoneMiddleware') 回溯: get_响应中的文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/core/handlers/base.py” 111响应=包装的回调(请求,*回调参数,**回调参数) 包装器中的文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/contrib/admin/sites.py” 225返回self.admin_视图(视图,可缓存)(*args,**kwargs) 视图中的文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/utils/decorators.py” 105响应=查看功能(请求,*args,**kwargs) 文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/views/decorators/cache.py”位于 52响应=查看功能(请求,*args,**kwargs) 文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/contrib/admin/sites.py”,位于内部 204返回视图(请求、*args、**kwargs) 文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/views/decorators/cache.py”位于 52响应=查看功能(请求,*args,**kwargs) 索引中的文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/contrib/admin/sites.py” 399. '名称“:apps.get\u app\u config(app\u标签)。详细的\u名称, get\u app\u config中的文件“/home/vagrant/.virtualenvs/garage/local/lib/python2.7/site packages/django/apps/registry.py” 150引发LookupError(“未安装标签为“%s”的应用程序”。%app\u标签) 异常类型:LookupError at/admin/ 异常值:未安装标签为“型号”的应用程序。 我尝试将app_标签添加到meta,但没有成功。此外,我还尝试覆盖元类并为这个模型注入app_标签,但这也没有像我预期的那样起作用。我可以在字典中插入app_标签,我认为它具有meta的值。但我无法检索到我所期望的值

class CustomAutoMeta(TopLevelDocumentMetaclass): def __new__(cls, name, bases, attrs): meta = MetaDict() super_new = super(CustomAutobahnMeta, cls).__new__ # this approach does not work meta.merge({'app_label':'auto'}) meta.merge(attrs.get('_meta', {})) attrs['_meta'] = meta attrs['_meta']['app_labels'] = 'auto' new_class = super_new(cls, name, bases, attrs) return new_class class DocumentBase(Document): my_metaclass = CustomAutoMeta __metaclass__ = CustomAutoMeta created = DateTimeField(default=datetime.datetime.utcnow().replace(tzinfo=utc)) updated = DateTimeField() def save(self, *args, **kwargs): if self.pk: self.updated = datetime.datetime.utcnow().replace(tzinfo=utc) super(DocumentBase, self).save(*args, **kwargs) meta = { 'abstract' : True, } class Auto(DocumentBase): pass # I can retrieve the value in this way Auto._meta['app_label'] # But I can't retrieve it in this way Auto._meta.app_label 类CustomAutoMeta(TopLevelDocumentMetaclass): 定义(cls、名称、基数、属性): meta=MetaDict() super\u new=super(自定义高速公路数据,cls)。\u new__ #这种方法行不通 meta.merge({'app_label':'auto'}) meta.merge(attrs.get(''u meta',{})) 属性[''u meta']=meta 属性[''u meta']['app\u labels']='auto' 新建类=超级新建(cls、名称、基数、属性) 返回新的\u类 类文档库(文档): my_元类=CustomAutoMeta __元类\自定义自动元 created=DateTimeField(默认值=datetime.datetime.utcnow().replace(tzinfo=utc)) updated=DateTimeField() def保存(自身、*args、**kwargs): 如果self.pk: self.updated=datetime.datetime.utcnow().replace(tzinfo=utc) super(DocumentBase,self).save(*args,**kwargs) 元={ "摘要":对,, } 自动类(文档库): 通过 #我可以用这种方式检索值 自动。_meta['app_label'] #但我不能用这种方式找回它 自动。_meta.app_标签
非常感谢您的建议。

错误显示您没有安装名为
models
的应用程序,我无法在已安装应用程序列表中看到它。这是在转移注意力吗?将单个文档类导入到
models/init.py
中是否解决了问题?它说没有安装模型,因为包含文档模型的文件位于models包中。当这些类导入到models/\uuu init\uuuu.py中时,就会出现错误。当模型在models/_init__;中创建时,py就是一切正常的时候。我认为django对django.db.models所做的是基于路径分割它,并将app_label属性添加到模型中,这在元类中非常重要。