我刚刚开始使用 Django 1.11 的第一个项目。我遵循了在多个 Django 1.10 项目中使用的相同步骤,但由于某种原因,我的模型没有显示在我的本地主机/管理站点上。
来自 settings.py 的我已安装的应用程序:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home.apps.HomeConfig',
]
我的admin.py:
from django.contrib import admin
from home.models import Home
# begin Admin Class Definitions
class HomeAdmin(models.ModelAdmin):
fieldsets = [
('Title', {'fields': ['title']}),
('Publication Date', {'fields': ['pub_date']}),
('Home Page Text', {'fields': ['header', 'sub_header',
'link_text']}),
]
list_display = ('title', 'pub_date')
list_filter = ['pub_date']
admin.site.register(Home, HomeAdmin)
我的[main_app]/urls.py:
from django.conf.urls import url, include
from django.contrib import admin
admin.autodiscover()
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('home.urls'))
]
但是当我转到
localhost:8000/admin
时,唯一存在的就是组和用户,就好像我根本没有注册任何模型一样。
我已经运行了 makemigrations 和 migrate,并且尝试将 admin.py 放入应用程序目录而不是项目目录中。它当前位于 [project_name]/[project_name] 目录(包含 settings.py、urls.py 和 wsgi.py 文件的目录)。
有什么建议吗?
我认为你必须向管理员注册你的模型。如果是简单的模型,我通常会这样做。
from django.contrib import admin
from .models import *
# Register your models here.
@admin.register(Model)
class ModelAdmin(admin.ModelAdmin): pass
我放弃了尝试诊断我的问题,并放弃了该项目并重新开始。现在效果很好。老实说,我不确定问题是什么。如果有人好奇,这是我的新文件:
来自设置.py:
INSTALLED_APPS = [
'home',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
来自 urls.py:
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
来自 admin.py:
from django.contrib import admin
# Register your models here.
from .models import HomePageText
admin.site.register(HomePageText)
老实说,我不明白为什么它以前不起作用。如果有更多洞察力的人可以发现一些我无法发现的差异,请告诉我。
当我使用 Django admin 时总是以这种形式导入:
from django.contrib import admin
并在类中继承:
class HomeAdmin(admin.ModelAdmin):
所以你的 admin.py 文件看起来像这样:
from django.contrib import admin
from home.models import Home
# begin Admin Class Definitions
class HomeAdmin(admin.ModelAdmin):
fieldsets = [
('Title', {'fields': ['title']}),
('Publication Date', {'fields': ['pub_date']}),
('Home Page Text', {'fields': ['header', 'sub_header',
'link_text']}),
]
list_display = ('title', 'pub_date')
list_filter = ['pub_date']
admin.site.register(Home, HomeAdmin)
愚蠢而明显的建议,但 Django 管理更改似乎并不总是立即被接受。如果一切看起来都配置正确(模型和管理员注册、应用程序安装等),请尝试重新启动服务器 - 在上面的所有建议之后,最终,这对我来说是成功的。
为了解决我的问题:我将 admin.py 文件移到与 settings.py 相同的文件夹中。相应地调整了导入声明。并重新启动服务器,非常重要。
from django.contrib import admin
from <project_folder>.<app_folder>.models import Notification
admin.site.register(Notification)
import .models
并将 admin.py 放入应用程序文件夹中不起作用。尽管尝试了很多小时。