Django管理员没有显示模型

Rob*_*b L 14 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)
Run Code Online (Sandbox Code Playgroud)

admin.py

from django.contrib import admin
from publications.models import Publication

admin.site.register(Publication)
Run Code Online (Sandbox Code Playgroud)

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',
)
Run Code Online (Sandbox Code Playgroud)

目录结构:

xrdb/
??? manage.py
??? publications
?   ??? __init__.py
?   ??? models.py
?   ??? tests.py
?   ??? views.py
??? xrdb
    ??? __init__.py
    ??? admin.py
    ??? settings.py
    ??? urls.py
    ??? wsgi.py
Run Code Online (Sandbox Code Playgroud)

从管理页面,我可以看到组,用户和站点.没有出版物!!

任何帮助?谢谢!!

编辑:我已经同步和迁移,admin.autodiscover()在urls.py中.

编辑II:更新了上面的文件.添加了目录结构.

Gra*_*ave 16

更改models.py文件后是否运行了syncdb?

转到项目的基本目录(manage.py所在的位置)并运行

python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

编辑:既然你已经尝试过这个,那么在你的类中添加一个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
Run Code Online (Sandbox Code Playgroud)

编辑2:有趣的是,我今天在我自己的项目上遇到了完全相同的问题.如果上面的str代码仍然不适合您,请仔细检查您是否在admin.py中实际注册了模型:

from MyApp.models import MyModel
admin.site.register(MyModel)
Run Code Online (Sandbox Code Playgroud)

编辑3:最后,确保带有上述代码的admin.py文件实际位于相关应用程序的目录中(即与models.py定义MyModel的目录相同).


ojo*_*ifu 6

确保您正在致电:

admin.site.register(<model-name>)

并不是

admin.register(<model-name>)

这就是我的原因。

  • 杰出的。当你遇到这个问题时,你应该首先检查它。 (4认同)

sag*_*age 5

请仔细检查您的权限-即:如果您认为您的用户是超级用户,则只需确定一下即可!如果您的用户不是超级用户,请在您以登录身份登录的用户下的“身份验证和授权”›“用户”中查找,并查看“用户权限:”是否包括所涉及应用程序的模型。

在追逐了我不想承认的时间之后,我意识到我的用户实际上不是超级用户。正如您将在许多相关文章中看到的那样,如果用户没有正确的权限,则应用程序很容易在Admin中不显示,例如: 在此处输入图片说明

如您所见,用户2对“完成”应用程序的模型没有必需的权限-仅对“计时”应用程序的模型具有权限。

我相当确定这是一个超级用户(但不是)。我认为要么必须减少我的权限才能解决其他用户所遇到的问题,要么要提供使用该系统的更具代表性的体验。

PS对此的一个赠品是,您使用进入的任何干净的数据库python manage.py createsuperuser都将显示您所有已注册的应用/模型,而现有数据库(权限可能会更细微的变化)将仅显示您的某些已注册应用/楷模。