Django管理员没有显示模型

时间:2014-07-17 21:07:15

标签: django django-admin

如果我能弄明白为什么我的模特没有在管理员中展示,我该死的。

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:更新了上面的文件。添加了目录结构。

6 个答案:

答案 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)

仔细检查您的权限 - 即:如果您认为您的用户是超级用户,请继续关注!如果您的用户不是超级用户,请查看您登录用户下的“身份验证和授权”>“用户”,并查看“用户权限:”是否包含相关应用程序的模型。

追逐这个时间比我承认的更长,我意识到我的用户实际上并不是超级用户。正如您将在许多相关帖子中看到的那样,如果用户没有正确的权限,则应用程序很容易在管理员中显示,例如: enter image description here

正如您所看到的,用户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

我希望它会有所帮助。 干杯!

相关问题