我真是一筹莫及。经过十几个小时的故障排除,可能更多,我以为我终于可以做生意了,但接着我发现:
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label
网上关于这方面的信息太少了,没有解决方案可以解决我的问题。任何建议都将不胜感激。
我使用的是Python 3.4和Django 1.10。
从我的settings.py:
INSTALLED_APPS = [
'DeleteNote.apps.DeletenoteConfig',
'LibrarySync.apps.LibrarysyncConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
我的app .py文件是这样的:
from django.apps import AppConfig
class DeletenoteConfig(AppConfig):
name = 'DeleteNote'
and
from django.apps import AppConfig
class LibrarysyncConfig(AppConfig):
name = 'LibrarySync'
很可能您有依赖的导入。
在我的例子中,我在我的模型中使用了一个序列化器类作为参数,并且序列化器类使用了这个模型:
serializer_class = AccountSerializer
from ..api.serializers import AccountSerializer
class Account(AbstractBaseUser):
serializer_class = AccountSerializer
...
在“serializers”文件中:
from ..models import Account
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = (
'id', 'email', 'date_created', 'date_modified',
'firstname', 'lastname', 'password', 'confirm_password')
...
在我的例子中,发生这种情况是因为我在项目级urls.py、INSTALLED_APPS和apps.py中使用了相对模块路径,而不是在项目根目录中。即绝对模块路径贯穿始终,而不是相对模块路径+ hacks。
无论我在我的应用程序中的INSTALLED_APPS和apps.py中的路径有多混乱,我都无法让runserver和pytest同时工作,直到它们都根植于项目根目录中。
文件夹结构:
|-- manage.py
|-- config
|-- settings.py
|-- urls.py
|-- biz_portal
|-- apps
|-- portal
|-- models.py
|-- urls.py
|-- views.py
|-- apps.py
下面,我可以运行manage.py runserver和gunicorn与wsgi和使用门户应用程序视图没有麻烦,但pytest会错误与ModuleNotFoundError:没有模块命名为'apps'尽管DJANGO_SETTINGS_MODULE配置正确。
配置/ settings.py:
INSTALLED_APPS = [
...
"apps.portal.apps.PortalConfig",
]
biz_portal / apps / portal / apps . py:
class PortalConfig(AppConfig):
name = 'apps.portal'
配置/ urls . py:
urlpatterns = [
path('', include('apps.portal.urls')),
...
]
将config/settings.py中的app引用更改为biz_portal.apps.portal.apps。PortalConfig和PortalConfig.name到biz_portal.apps。门户允许pytest运行(我还没有对门户视图进行测试),但runserver会出错
模型类apps.portal.models.Business没有显式声明app_label,也不在INSTALLED_APPS中的应用程序中
最后,我为应用程序做了准备。门户查看哪些仍然使用相对路径,并发现config/urls.py也应该使用biz_portal.apps.portal.urls。