Django站点包错误:“0”;该模型站点已在app';网站'&引用;

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

我正在尝试安装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 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