如果我能弄明白为什么我的模特没有在管理员中展示,我该死的。
models.py看起来像这样:
from django.db import models
class Publication(models.Model):
title = models.CharField(max_length=255)
def __unicode__(self):
return unicode(self.title)
admin.py
from django.contrib import admin
from publications.models import Publication
admin.site.register(Publication)
settings.py
...
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'south',
'publications',
)
目录结构:
xrdb/
├── manage.py
├── publications
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── xrdb
├── __init__.py
├── admin.py
├── settings.py
├── urls.py
└── wsgi.py
从管理页面,我可以看到群组,用户和网站。没有出版物!!
任何帮助? 谢谢!
编辑:我已经同步并迁移了,admin.autodiscover()位于urls.py中。编辑II:更新了上面的文件。添加了目录结构。
答案 0 :(得分:14)
更改models.py文件后是否运行了syncdb?
转到项目的基本目录(manage.py所在的位置)并运行
python manage.py syncdb
编辑:由于您已经尝试过这种方法,因此请在您的类中添加str或unicode方法,如下所示:
class Resource(models.Model):
title = models.CharField(max_length=128, blank=True)
def __str__(self): # __str__ for Python 3, __unicode__ for Python 2
return self.name
编辑2:有趣的是,我今天在我自己的项目上遇到了完全相同的问题。如果上面的 str 代码仍不适合您,请仔细检查您是否在admin.py中实际注册了模型:
from MyApp.models import MyModel
admin.site.register(MyModel)
编辑3:最后,确保带有上述代码的admin.py文件实际位于相关应用程序的目录中(即与models.py定义MyModel的目录相同)。
答案 1 :(得分:4)
仔细检查您的权限 - 即:如果您认为您的用户是超级用户,请继续关注!如果您的用户不是超级用户,请查看您登录用户下的“身份验证和授权”>“用户”,并查看“用户权限:”是否包含相关应用程序的模型。
追逐这个时间比我承认的更长,我意识到我的用户实际上并不是超级用户。正如您将在许多相关帖子中看到的那样,如果用户没有正确的权限,则应用程序很容易在管理员中显示,例如:
正如您所看到的,用户2对“完成”应用的模型没有所需的权限 - 仅限于“计时”应用的模型。
我很确定这是超级用户(但事实并非如此)。我认为我必须减少我的权限,以解决其他用户已经看到的问题,或者使用该系统提供更具代表性的体验。
PS为此问题的一个好处是,任何使用python manage.py createsuperuser
开始运行的干净数据库都会显示所有已注册的应用/模型,而现有数据库(权限可能更加细微)将会显示仅显示您注册的一些应用/型号。
答案 2 :(得分:2)
检查urls.py中是否有admin.autodiscover()。
答案 3 :(得分:1)
确保您正在拨打电话:
admin.site.register(<model-name>)
而不是
admin.register(<model-name>)
这是我的原因。
答案 4 :(得分:0)
步骤1:从迁移文件夹中删除所有迁移。
第2步:转到根目录并键入
python manage.py makemigrations publications
注意:此处的出版物是您的子应用名称
xrdb#主目录文件夹
├──xrdb#Main app
├──出版物#Sub app
第3步:
python manage.py sqlmigrate publications 0001
注意:0001是迁移文件名
这将解决您的问题
干杯!!
答案 5 :(得分:0)
这是我的情况,可能与您的情况不同。
检查是否已创建admin.pyc
,如果未创建则没有被调用。如果未调用它,则原因之一是其中有xrdb/xrdb/admin
的{{1}}文件夹。
我想还有其他方法可以做到这一点,但是对我来说,我创建了一个文件,将您的情况看成__init__.py
内的publications_admin.py
,然后在{{1}内添加xrdb/xrdb/admin
}。
在import xrdb.admin.publications_admin
内进行注册,就像这样。
xrdb/xrdb/admin/__init__.py
我希望它会有所帮助。 干杯!