我已经结束了。经过十几个小时的故障排除,可能更多,我以为我终于开始营业,但后来我得到了:
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',
]
我的apps.py文件看起来像这样:
from django.apps import AppConfig
class DeletenoteConfig(AppConfig):
name = 'DeleteNote'
和
from django.apps import AppConfig
class LibrarysyncConfig(AppConfig):
name = 'LibrarySync'
答案 0 :(得分:57)
您是否遗漏了将应用程序名称输入设置文件?
myAppNameConfig
是 .manage.py createapp myAppName 命令在apps.py处生成的默认类。其中 myAppName 是您的应用的名称。
settings.py
INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这样,设置文件会找出您要为应用程序调用的内容。您可以通过在
中添加以下代码来更改它在apps.py文件中的显示方式myAppName / apps.py
class myAppNameConfig(AppConfig):
name = 'myAppName'
verbose_name = 'A Much Better Name'
答案 1 :(得分:12)
当我使用./manage.py shell
时我得到了这个
然后我不小心从根项目级目录导入
# don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model
something_using_a_model()
答案 2 :(得分:12)
使用PyCharm运行测试时,我遇到了完全相同的错误。我通过明确设置DJANGO_SETTINGS_MODULE
环境变量修复了它。如果您正在使用PyCharm,只需点击编辑配置按钮并选择环境变量。
将变量设置为your_project_name.settings
,这应该可以解决问题。
似乎发生了这个错误,因为PyCharm使用自己的manage.py
运行测试。
答案 3 :(得分:10)
我刚才遇到了同样的问题。我通过在应用名称上添加命名空间来修复我的问题。希望有人觉得这很有帮助。
<强> apps.py 强>
from django.apps import AppConfig
class SalesClientConfig(AppConfig):
name = 'portal.sales_client'
verbose_name = 'Sales Client'
答案 4 :(得分:10)
我遇到相同的错误,但我不知道如何解决此问题。我花了好几个小时才注意到,我在与django的manage.py相同的目录中有一个init.py。
之前:
|-- myproject
|-- __init__.py
|-- manage.py
|-- myproject
|-- ...
|-- app1
|-- models.py
|-- app2
|-- models.py
之后:
|-- myproject
|-- manage.py
|-- myproject
|-- ...
|-- app1
|-- models.py
|-- app2
|-- models.py
很困惑您收到此“未声明显式app_label”错误。但是删除此 init 文件解决了我的问题。
答案 5 :(得分:5)
使用 Python3 作为菜鸟,我发现它可能是导入错误而不是Django错误
错误:
from someModule import someClass
右:
from .someModule import someClass
这种情况发生在几天前,但我真的无法重现它...我认为只有刚接触Django的人才会遇到这种情况。这就是我记得的:
尝试在admin.py中注册模型:
from django.contrib import admin
from user import User
admin.site.register(User)
尝试运行服务器,错误看起来像这样
some lines...
File "/path/to/admin.py" ,line 6
tell you there is an import error
some lines...
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label
将user
更改为.user
,问题已解决
答案 6 :(得分:2)
我遇到了类似的问题,但是我可以通过在模型类中使用Meta类明确指定app_label来解决我的问题
class Meta:
app_label = 'name_of_my_app'
答案 7 :(得分:1)
尝试将我的Django Rest Framework应用程序升级到DRF 3.6.3和Django 1.11.1时出现此错误。
对于这种情况下的其他任何人,我找到了我的解决方案in a GitHub issue,这是取消设置DRF settings中的UNAUTHENTICATED_USER
设置:
# webapp/settings.py
...
REST_FRAMEWORK = {
...
'UNAUTHENTICATED_USER': None
...
}
答案 8 :(得分:1)
就我而言,当我未连接到项目的虚拟环境时尝试运行python manage.py runserver
时遇到此错误。
答案 9 :(得分:1)
对于PyCharm用户:使用“干净”项目结构时出现错误。
原是:
project_root_directory
└── src
├── chat
│ ├── migrations
│ └── templates
├── django_channels
└── templates
现在:
project_root_directory
├── chat
│ ├── migrations
│ └── templates
│ └── chat
├── django_channels
└── templates
这里有很多好的解决方案,但是我认为,首先,您应该在设置DJANGO_SETTINGS_MODULE
变量之前清理项目结构或调整PyCharm Django设置,等等。
希望它会帮助某人。干杯。
答案 10 :(得分:1)
在继续遇到这个问题并继续回到这个问题之后,我想我会分享我的问题所在。
@Xeberdee的所有信息都是正确的,请遵循此步骤,看看是否可以解决问题,如果不是,这是我的问题:
在我的apps.py中,这就是我拥有的:
class AlgoExplainedConfig(AppConfig):
name = 'algo_explained'
verbose_name = "Explain_Algo"
....
我所做的就是将项目名称添加到我的应用名称之前,如下所示:
class AlgoExplainedConfig(AppConfig):
name = '**algorithms_explained**.algo_explained'
verbose_name = "Explain_Algo"
这解决了我的问题,之后,我能够运行makemigrations和migration命令!祝你好运
答案 11 :(得分:1)
如果所有其他方法均失败,并且在尝试导入PyCharm“ Python控制台”(或“ Django控制台”)时遇到此错误:
尝试重新启动控制台。
这真是令人尴尬,但是花了我一段时间我才意识到我忘记这样做了。
这是发生了什么:
添加了一个新的应用程序,然后添加了一个最小模型,然后尝试在Python / Django控制台(PyCharm pro 2019.2)中导入该模型。这引发了doesn't declare an explicit app_label
错误,因为我没有将新应用添加到INSTALLED_APPS
中。
因此,我将应用程序添加到INSTALLED_APPS
,再次尝试了导入,但是仍然遇到相同的错误。
来这里,阅读所有其他答案,但似乎没有合适的答案。
最后,令我惊讶的是,在将新应用添加到INSTALLED_APPS
之后,我还没有重新启动Python控制台。
注意:在将新对象添加到模块后,未能重新启动PyCharm Python控制台也是获得令人困惑的ImportError: Cannot import name ...
答案 12 :(得分:1)
如果所有配置正确,则可能只是导入混乱。密切关注您如何导入违规模型。
以下内容将不起作用from .models import Business
。请使用完整的导入路径:from myapp.models import Business
答案 13 :(得分:1)
在我的情况下,我能够找到一个修复程序,并且通过查看其他人的代码也可能是同样的问题。.我只需要将'django.contrib.sites'添加到已安装应用程序列表中即可。 settings.py文件。
希望这对某人有帮助。这是我对编码社区的第一个贡献
答案 14 :(得分:1)
就我而言,将代码从Django 1.11.11移植到Django 2.2时出现此错误。我正在定义一个自定义FileSystemStorage派生类。在Django 1.11.11中,我在models.py中包含以下行:
from django.core.files.storage import Storage, DefaultStorage
然后在文件中我有了类定义:
class MyFileStorage(FileSystemStorage):
但是,在Django 2.2中,我需要在导入时显式引用FileSystemStorage
类:
from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage
然后瞧瞧!错误消失了。
请注意,每个人都在报告Django服务器随地吐痰的错误消息的最后一部分。但是,如果向上滚动,则会在错误mambo-jambo的中间找到原因。
答案 15 :(得分:1)
在Django rest_framework中构建API时遇到类似的错误。
RuntimeError:模型类apps.core.models.University没有声明显式> app_label,并且不在INSTALLED_APPS中的应用程序中。
luke_aus的答案通过纠正我的 urls.py
对我有帮助来自
from project.apps.views import SurgeryView
到
from apps.views import SurgeryView
答案 16 :(得分:1)
我刚遇到这个问题并找出问题所在。由于没有先前的答案描述了这个问题,因为它发生在我身上,但我会将其发布给其他人:
python migrate.py startapp myApp
,然后将myApp移动到mv myApp myFolderWithApps/
的子文件夹。python migrate.py makemigrations
。一切顺利。myFolderWithApps.myApp
来引用我的应用,但我忘了更新MyApp / apps.py。所以我在第二个应用程序中更正了myApp / apps.py,settings / INSTALLED_APPS和我的导入路径。总而言之: - 问题最初来自myApp的apps.py中的错误应用名称,设置和我的第二个应用的导入路径。 - 但这还不足以纠正这三个地方的路径,因为迁移是使用导入引用错误的应用名称创建的。因此,迁移时会发生同样的错误(此次迁移除外)。
所以...检查你的迁移,祝你好运!
答案 17 :(得分:1)
我在测试中导入模型时出现此错误,即给定此Django项目结构:
|-- myproject
|-- manage.py
|-- myproject
|-- myapp
|-- models.py # defines model: MyModel
|-- tests
|-- test_models.py
文件test_models.py
中的我以这种方式导入MyModel
:
from models import MyModel
如果以这种方式导入问题,问题就解决了:
from myapp.models import MyModel
希望这有帮助!
PS:也许这有点晚了,但我没有在其他人的答案中找到如何在我的代码中解决这个问题,我想分享我的解决方案。答案 18 :(得分:1)
当我尝试为单个应用生成迁移时遇到此错误,该应用由于git合并而导致存在格式错误的迁移。 e.g。
manage.py makemigrations myapp
当我删除它的迁移然后运行:
manage.py makemigrations
未发生错误,并且成功生成了迁移。
答案 19 :(得分:0)
我今天遇到了这个错误,并在谷歌搜索后结束了这里。现有的答案似乎都与我的情况无关。我唯一需要做的就是从应用程序顶层的__init__.py
文件中导入模型。我必须使用模型将导入内容移入功能。
Django似乎有一些奇怪的代码,在许多不同的情况下都可能会失败!
答案 20 :(得分:0)
我今天也遇到了这个错误。 该消息引用了 INSTALLED_APPS 中我的应用的某些特定应用。但实际上,它与此特定的应用程序无关。我使用了一个新的虚拟环境,却忘记安装一些本项目中使用的库。在我安装了其他库之后,它开始工作了。
答案 21 :(得分:0)
我今天尝试运行Django测试时遇到此错误,因为我在其中一个文件中使用了简写from .models import *
语法。问题是我的文件结构是这样的:
apps/
myapp/
models/
__init__.py
foo.py
bar.py
在models/__init__.py
中,我使用速记语法导入模型:
from .foo import *
from .bar import *
在我的应用程序中,我正在导入如下模型:
from myapp.models import Foo, Bar
这在运行Django model doesn't declare an explicit app_label
时导致了./manage.py test
。
要解决此问题,我必须从models/__init__.py
中的完整路径中显式导入:
from myapp.models.foo import *
from myapp.models.bar import *
解决了错误。
H / t https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a
答案 22 :(得分:0)
在我的情况下,这是因为我在项目级别的 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
通过以下操作,我可以在wsgi上运行manage.py runserver
和gunicorn并使用portal
应用视图,而ModuleNotFoundError: No module named 'apps'
的pytest会出错,尽管DJANGO_SETTINGS_MODULE
的配置正确
config / settings.py:
INSTALLED_APPS = [
...
"apps.portal.apps.PortalConfig",
]
biz_portal / apps / portal / apps.py:
class PortalConfig(AppConfig):
name = 'apps.portal'
config / urls.py:
urlpatterns = [
path('', include('apps.portal.urls')),
...
]
将config / settings.py中的应用程序引用更改为biz_portal.apps.portal.apps.PortalConfig
,将PortalConfig.name
更改为biz_portal.apps.portal
可以运行pytest(我还没有针对portal
视图的测试),但runserver
会出错
RuntimeError:模型类apps.portal.models.Business未声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中
最后,我摸索着apps.portal
,以查看仍在使用相对路径的内容,并发现config / urls.py也应使用biz_portal.apps.portal.urls
。
答案 23 :(得分:0)
我在PyCharm中遇到此错误,并意识到我的设置文件根本没有被导入。没有明显的错误告诉我,但是当我在settings.py中放入一些废话代码时,并没有引起错误。
我在 local_settings 文件夹中包含 settings.py 。但是,我希望在同一文件夹中包含 __ init __。py 以便导入。添加空白 __ init __。py 对我来说就是一个问题。
答案 24 :(得分:0)
O ... M ... G 我也遇到了这个错误,我花了将近2天的时间,现在终于设法解决了。老实说...错误与问题所在无关。 就我而言,这只是语法问题。我试图独立运行一个在django上下文中使用某些django模型的python模块,但是该模块本身不是django模型。但是我宣布班级错误
而不是拥有
class Scrapper:
name = ""
main_link= ""
...
我在做
class Scrapper(Website):
name = ""
main_link= ""
...
这显然是错误的。该消息是如此令人误解,以至于我忍不住想,但认为这是配置方面的问题,或者只是以错误的方式使用django,因为我对此很陌生。
我将在这里与新手分享,因为我经历同样的愚蠢可以有望解决他们的问题。
答案 25 :(得分:0)
很可能你有依赖导入。
在我的例子中,我在我的模型中使用了序列化程序类作为参数,并且序列化程序类使用了这个模型: serializer_class = AccountSerializer
from ..api.serializers import AccountSerializer
class Account(AbstractBaseUser):
serializer_class = AccountSerializer
...
在&#34;序列化器&#34;文件:
from ..models import Account
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = (
'id', 'email', 'date_created', 'date_modified',
'firstname', 'lastname', 'password', 'confirm_password')
...
答案 26 :(得分:0)
我将SECRET_KEY
从环境变量中拉出来后忘记在运行应用程序时设置它时收到此错误。如果您在settings.py
SECRET_KEY = os.getenv('SECRET_KEY')
然后确保您实际上是在设置环境变量。
答案 27 :(得分:0)
还要检查您的迁移是否正常工作
Python3 manage.py makemigrations
Python3 manage.py migrate
答案 28 :(得分:0)
就我而言,settings.py 中的 BASE_DIR 存在问题 这是包的结构:
project_root_directory
└── service_package
└── db_package
├── my_django_package
│ └── my_django_package
│ ├── settings.py
│ └── ...
└── my_django_app
├── migrations
├── models.py
└── ...
它在更新 settings.py 时起作用:
INSTALLED_APPS = [
'some_django_stuff_here...',
'some_django_stuff_here....',
...
'service_package.db_package.my_django_app'
]
和指向项目根目录的 BASE_DIR
BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent.parent
在调试中运行 django 后出现这个问题,在 registry.py 中设置断点 -> def get_包含_app_config(self, object_name)
答案 29 :(得分:0)
就我而言,我在 describe("Trouble with iterables => ", () => {
// db.tables is received as an array
it("tables property is an array", () => {
const db = Database(Table(Song), Table(Playlist));
expect(Array.isArray(db.tables)).toBe(true);
expect(typeof db.tables[0]).toBe("object");
});
// for..of iterates over the array correctly and extracts the "name" prop
it("for ... of returns the names of the tables correctly", () => {
const db = Database(Table(Song), Table(Playlist));
expect(db.tableNamesWithForOf).toHaveLength(2);
expect(db.tableNamesWithForOf).toContain("Song");
expect(db.tableNamesWithForOf).toContain("Playlist");
});
// shockingly, forEach doesn't iterate at all and returns `undefined`!
it("forEach returns the names of the tables correctly", () => {
const db = Database(Table(Song), Table(Playlist));
expect(db.tableNames).toHaveLength(2);
expect(db.tableNames).toContain("Song");
expect(db.tableNames).toContain("Playlist");
});
});
中尝试了相同的导入。外壳被更新的数据库搞砸了。我的意思是,我忘记在更新数据库后重新启动我的 shell。
为了解决这个问题,我不得不通过以下命令停止 shell:
javascript
然后通过以下命令重新启动shell:
typescript
希望这能帮助像我这样的人。
答案 30 :(得分:-1)
问题在于:
您已经对模型文件进行了修改,但尚未将其添加到数据库中,但是您正在尝试运行Python manage.py runserver。
运行Python manage.py makemigrations
Python manage.py migration
现在使用Python manage.py runserver,一切都很好。