Django管理界面没有显示模型

17

我真的无法想象为什么我的模型没有显示在管理员中。

models.py看起来像这样:

from django.db import models

class Publication(models.Model):
    title = models.CharField(max_length=255)

    def __unicode__(self):
        return unicode(self.title)

管理.py

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

admin.site.register(Publication)

设置.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

从管理员页面,我可以看到组、用户和站点。但是没有出版物!!

需要帮助吗?

编辑:我已经同步和迁移,并且在urls.py中添加了admin.autodiscover()。

第二次编辑:上面的文件已更新。添加了目录结构。


1
运行syncdb,然后使用python manage.py runserver重新启动。 - Burhan Khalid
是的,是的。已经完成了所有这些。还有 schemamigration 和 migrate。 - Rob L
6个回答

21

在更改了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 文件实际上位于所涉及的应用程序目录内(即与定义 MyModel 的 models.py 相同的目录)。


如果你打开数据库并查看其中的内容,你是否能看到一个名为“资源”的表格? - Gravity Grave
1
哦,__unicode__(self)。我回家后会尝试一下。也许就是这个问题。这个周末我和我的甜心在山上。星期一早上我会试一下。顺便说一句,是的,表格在数据库中。 - Rob L
@RobL 是的,抱歉,我刚刚双重检查了一下。请参见我上面编辑过的评论。可能看到您的目录结构转储(或者至少是哪些子文件夹中的文件是来自上面链接的文件)会比较好。此外,请在您上面的代码中更新 (2个下划线)str/unicode(2个下划线) 这部分,因为它已经实现了。 - Gravity Grave
原帖已更新代码。添加了目录结构。 - Rob L
1
@RobL 啊哈,我想我明白了!你在帖子中提到的 admin.py 需要放在 publications 目录中! - Gravity Grave
显示剩余8条评论

20

确保您调用:

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

而不是

admin.register(<model-name>)

这是我的问题所在。


4
好的,当你遇到这个问题时,聪明的做法应该是首先检查它。 - ICW
1
谢谢,又是一个 Django 的问题,没有任何错误提示,也没有任何反应 ^^。 - Peter C
1
非常感谢!您帮我节省了调试问题的时间,但愿早点找到您! - AMK

9
请仔细检查您的权限——也就是说,如果您认为您的用户是超级用户,请确保核实!如果您的用户不是超级用户,请在“身份验证和授权”›“用户”下查看您所登录的用户,并查看“用户权限:”是否包括相关应用程序的模型。
在追踪这个问题比我愿意承认的时间长之后,我意识到我的用户实际上不是超级用户。正如您在许多相关帖子中看到的那样,如果用户没有正确的权限,例如在此处enter image description here,应用程序很容易不显示在管理界面中。
如您从图中所见,用户2没有“done”应用程序模型所需的权限,仅有“timekeeping”应用程序模型的权限。
我非常确定这是一个超级用户(但它不是)。我想要么是我必须减少我的权限来解决另一个用户遇到的问题,要么是为了给使用该系统的人提供更具代表性的体验。
提示:问题的线索是,在干净的数据库中,使用python manage.py createsuperuser启动时会显示所有已注册的应用程序/模型,而现有数据库(其中权限可能更加微妙)仅显示某些已注册的应用程序/模型。

这并不是我的情况下的解决方案。但我想对于其他人可能会有用。 - Rob L

2

请检查您在urls.py文件中是否有admin.autodiscover()。


我在urls.py中有admin.autodiscover()。 - Rob L

0

这是我的情况,可能与您的不同。

检查是否已创建 admin.pyc,如果没有被创建,则说明它没有被调用。如果它没有被调用,则有一个原因是您有一个带有 __init__.pyxrdb/xrdb/admin 文件夹。

我想还有其他方法可以解决这个问题,但对于我来说,我创建了一个文件,看起来会像 xrdb/xrdb/admin/publications_admin.py 这样,并在 xrdb/xrdb/admin/__init__.py 内添加 import xrdb.admin.publications_admin

publications_admin.py 中进行注册,看起来应该是这样的。

from django.contrib import admin
from xrdb.models import Publications

admin.site.register(Publications)

希望能对你有所帮助。 祝好!


-1

步骤1:删除迁移文件夹中的所有迁移文件。

步骤2:进入根目录并输入命令。

python manage.py makemigrations publications

注意:这里的 publications 是您的子应用程序名称

xrdb # 主目录文件夹

├── xrdb # 主应用程序

├── publications # 子应用程序

步骤 3:

python manage.py sqlmigrate publications 0001

注意:0001 是迁移文件的名称

这将解决你的问题

干杯!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接