模型未在 Django 管理界面中显示。

99

我已经创建了几个 Django 应用程序和其他东西供自己娱乐,到目前为止一切都运行正常。

现在,我刚创建了一个新项目(django 1.2.1),从一开始就遇到了麻烦。

我创建了一个新的应用程序 - 游戏,并创建了一个名为 Game 的新模型。我创建了 admin.py 并将相关内容放入其中。运行 syncdb 然后进入管理界面检查,但是模型没有出现。

我继续检查、重复检查并阅读之前类似的线程:

Registered models do not show up in admin Django App Not Showing up in Admin Interface

但据我所知,它们对我没有帮助。也许有人可以指出这点。

游戏应用程序中的 models.py:

# -*- coding: utf-8 -*-
from django.db import models

class Game(models.Model):
      type = models.IntegerField(blank=False, null=False, default=1)
      teamone = models.CharField(max_length=100, blank=False, null=False)
      teamtwo = models.CharField(max_length=100, blank=False, null=False)
      gametime = models.DateTimeField(blank=False, null=False)

游戏应用程序中的 admin.py:
# -*- coding: utf-8 -*-
from jalka.game.models import Game
from django.contrib import admin

class GameAdmin(admin.ModelAdmin):
      list_display    = ['type', 'teamone', 'teamtwo', 'gametime']
      
admin.site.register(Game, GameAdmin)

项目 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',
)

ROOT_URLCONF = 'jalka.urls'

TEMPLATE_DIRS = (
      "/home/projects/jalka/templates/"
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'game',
)

urls.py:

from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
      # Example:
      # (r'^jalka/', include('jalka.foo.urls')),
      (r'^admin/', include(admin.site.urls)),
)
32个回答

204

报告的问题可能是因为您没有在管理站点中注册模型。这可以通过在应用程序下创建一个 admin.py 文件,并在其中使用以下代码进行模型注册:

from django.contrib import admin
from .models import YourModel
admin.site.register(YourModel)
from django.contrib import admin
from .models import MyModel

admin.site.register(MyModel)

14
为什么这个回答是最高评分的?我的代码显示我确实有admin.site.register...而且被选为正确答案,所以到底怎么回事... - Odif Yltsaeb
55
因为人们在谷歌中输入“模型未在管理界面显示”,尝试第一个SO页面上找到的所有解决方案,并点赞任何有效的方法 :-D - andyhasit
1
依然排名在前... XD @andyhasit 很好的发现! - Dos
2
@dios231 不,假设迁移已经应用,它应该立即生效。 - Shane Reustle
1
那就是我的问题的解决方案!谢谢! - Galaxy
显示剩余5条评论

38

嗯嗯...尝试在settings.py中更改您应用的包含方式:

来自:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'game',
    ....

To:

(翻译:收件人:)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'YOUR_PROJECT.game',# OR 'YOUR_PROJECT.Game'

1
确实可以尝试一下这个方法。但如果真的是这种情况,那么我怀疑模型也不会出现在数据库中。但我还是会试一下,以防万一。 - Odif Yltsaeb
1
看起来就是这样了。Django对某些事情是否真的变得更严格了?比如我发现在上下文处理器中使用'pass'会导致错误,所以我不得不用return {}来替代pass以消除这些错误(更多信息请参考- http://groups.google.com/group/django-users/browse_thread/thread/144fa6b67db420f/ec98c74e0606cbe3)。 - Odif Yltsaeb
14
这里还有另一种可能性,就是您以一个没有更改该模型权限的用户身份登录到管理员界面;在这种情况下,即使其他一切都正确,该模型也不会显示。因此,在这些情况下,为了调试最好确保您已经作为管理员用户登录,以排除权限问题。 - Stefan Magnuson
2
你在哪里可以找到YOUR_PROJECT的值,以及在哪里可以找到game的值?我知道第一个问题对大多数人来说可能很明显,但是我正在处理的项目命名混乱。 - arshbot

36

我在使用Django 2.0时遇到了相同的问题。

以下代码没有起作用:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from users import models

admin.register(models.User, UserAdmin)

事实证明这条线路

admin.register(models.User, UserAdmin)

本应该是

admin.site.register(models.User, UserAdmin)

由于我没有收到任何警告,只想在这里指出这个问题。


3
这是对我有效的方法。这是一个很傻的问题,竟然会让人跌倒 - 应该在某个地方记录下来 - 或者发出警告/错误提示! - Homunculus Reticulli
我认为是一样的。Django没有显示任何关于这个错误的警告。花了两个小时寻找解决方案..谢谢大家。 - Luis Gabriel Fabres
哇塞!谢谢。 - user66081

10

我知道问题已经得到解答和接受,但我想分享一下我对这个问题的解决方案,也许会帮助其他人。

我的INSTALLED_APPS长这样:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',  # <---- this is my custom app
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'south',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

看,我把我的应用程序放在Django的管理应用程序之前,显然它们按照那个顺序加载。我只是将我的应用程序移到管理员下面,它就开始显示了 :)


6
我遇到了同样的问题,一切都做得没错。但我没有查看模型的权限。
只需授予所需权限(查看/添加/编辑等),然后再检查一次。
使用管理员面板授予权限:
  1. 使用超级用户帐户的凭据登录网站。
  2. Admin 网站的顶层显示按“Django 应用程序”排序的所有模型。从身份验证和授权部分,您可以单击“用户”或“组”链接以查看其现有记录。
  3. 选择并添加所需权限
选择并添加所需权限enter image description here 通过管理面板添加/更改权限,请参阅this 替代方法: 使用代码请参阅Official Django Doc

6
对于Django 1.10,我通过在模型名称后面添加(admin.ModelAdmin)的方式进行注册。
from django.contrib import admin

from .models import YourModel
admin.register(YourModel)(admin.ModelAdmin)

2
这对我有用,帮助我找到了一个错误,但你可能想使用正确的方式admin.site.register(YourModel) - Mark Chackerian

5

我在注册我的模型方面也遇到了困难(尝试了以上所有建议),直到我做了一件非常简单的事情。我将我的 admin.py 从目录中移出到项目目录 - 刷新了管理员界面并将其移回,然后就能在模型应用程序目录中立即看到它们全部出现了。我使用 PyCharm,所以不确定是否会引起一些问题。

我的设置完全符合 Django 手册所说的 -

models.py

class xxx(models.Model):
    ....
    def __str__(self):  # __str__ for Python 3, __unicode__ for Python 2
        return self.name

admin.py

from .models import xxx
admin.site.register(xxx)

这真的帮了我。Pycharm表现得很奇怪,我不得不重新启动整个IDE来解决问题。关闭/打开服务器对我没有用。JetBrains到底在搞什么鬼... - zebralamy

5

可能很罕见,但我今天遇到了一个问题:我创建的admin.py文件的权限损坏,因此django无法读取它。我删除了该文件并成功重新创建了它。

希望这能帮助到有类似问题的人。


4

我正在使用Digital Ocean,也遇到了这个问题。解决方法是重新启动服务。我使用了

service gunicorn restart

这样就可以显示模型了。


3

我遇到了同样的问题。我的一些模型没有在 Django 后台管理面板中显示,因为我没有在 admin.py 文件中注册这些模型。

//Import all the models if you have many

from store.models import *

admin.site.register(Order)
admin.site.register(OrderItem)

这对我很有帮助。只需注册并刷新您的网页,模型就会在管理仪表板中显示。

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