gpt4 book ai didi

Django 网站包错误 : "The model Site is already registered in app ' sites'"

转载 作者:行者123 更新时间:2023-12-02 02:09:22 27 4
gpt4 key购买 nike

我正在尝试安装站点包,并且在运行 makemigrations 时收到错误:

django.contrib.admin.sites.AlreadyRegistered: The model Site isalready registered in app 'sites'.

这是我的 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 block 来捕获这一事实。但问题是,其他包不知道您正在这样做,并且显然不会使用 try- except block 。您收到错误是因为您成功地将模型 Site 注册到管理站点,但是当 django.contrib.sites 尝试注册相同的模型时,它会失败,因为它已经注册了。

一种解决方案可能是更好地排序您的INSTALLED_APPS,并且您的应用放在最后。目前,您在许多应用程序(甚至是第三方应用程序)之后列出了 django.contrib.sites:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites', # Move it here
'webpage',
'django_user_agents',
'analytical',
'corsheaders',
]

如果其他一些应用程序尝试注册其模型,这可能会导致错误。不要对所有模型进行这种暴力注册,请考虑仅在其 admin.py 内为您的应用程序注册模型:

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

关于Django 网站包错误 : "The model Site is already registered in app ' sites'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67924302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com