Django站点包错误:“0”;该模型站点已在app';网站'&引用;
我正在尝试安装sites软件包,运行makemigrations时收到错误: django.contrib.admin.sites.AlreadyRegistered:模型站点为 已在应用程序“站点”中注册 这是我的admin.py:Django站点包错误:“0”;该模型站点已在app';网站'&引用;,django,django-models,Django,Django Models,我正在尝试安装sites软件包,运行makemigrations时收到错误: django.contrib.admin.sites.AlreadyRegistered:模型站点为 已在应用程序“站点”中注册 这是我的admin.py: from django.contrib import admin # Register your models here. from django.apps import apps models = apps.get_models() for model i
from django.contrib import admin
# Register your models here.
from django.apps import apps
models = apps.get_models()
for model in models:
try:
admin.site.register(model)
except admin.sites.AlreadyRegistered:
pass
以下是我安装的应用程序:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'webpage',
'django_user_agents',
'analytical',
'corsheaders',
'django.contrib.sites',
]
知道是什么导致了这个问题吗?如果缺少信息,请告诉我。您的管理员在“站点应用”之前注册了“站点应用”的模型,最好的解决方案是跳过您的管理员中的“站点模型”,以便“站点中的管理员”可以注册其模型。您正在您的
admin.py
中注册所有应用的所有模型。您似乎意识到这样一个事实,即某些模型可能已经注册,并使用try-except块来捕获它。但问题是,其他软件包不知道您正在这样做,显然不会使用try-except块。您之所以会出现错误,是因为您成功地向管理站点注册了模型站点
,但是当django.contrib.sites
尝试注册相同的站点时,它失败了,因为它已经注册了
一种解决方案可能是订购更好的已安装的应用程序
,让你的应用程序排在最后。目前,您有django.contrib.sites
在许多应用程序(甚至是第三方应用程序)之后列出:
同样,如果其他一些应用程序尝试注册其模型,这可能会导致错误。而不是这样做,所有模型的暴力注册都考虑只注册你的应用程序的模型,在它的<代码> admin。p/<代码>:
from django.contrib import admin
# Register your models here.
from django.apps import apps
app_config = apps.get_app_config('your_app_name') # Replace your_app_name it is just a placeholder
models = app_config.get_models()
for model in models:
try:
admin.site.register(model)
except admin.sites.AlreadyRegistered:
pass
from django.contrib import admin
# Register your models here.
from django.apps import apps
app_config = apps.get_app_config('your_app_name') # Replace your_app_name it is just a placeholder
models = app_config.get_models()
for model in models:
try:
admin.site.register(model)
except admin.sites.AlreadyRegistered:
pass