【问题标题】:model not showing up in django admin模型没有出现在 django admin 中
【发布时间】:2011-02-28 10:10:42
【问题描述】:

我已经为自己的基金创建了几个 django 应用程序和东西,到目前为止一切正常。

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

我创建了新应用 - 游戏和新模型游戏。我创建了 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)

项目设置.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)),
)

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您确保已将模型添加到 admin.py 文件。

    示例:如果您的模型是联系人。

    from django.contrib import admin
    
    from .models import Contact
    admin.site.register((Contact))
    

    现在,如果不尝试重新启动服务器,您的问题可能会得到解决。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,django=4.0docker-compose 我没有使用 ModelAdmin,结果在一次调用 admin.site.register 时注册多个模型在运行迁移时出错。

      这样做

      admin.site.register(ModelA, ModelB)
      

      没用。相反,你我做了类似的事情

      admin.site.register(ModelA)
      admin.site.register(ModelB)
      

      我希望它可以帮助任何人码头化他们的 Django 应用

      【讨论】:

        【解决方案3】:

        对我来说,迁移是一个问题。如果您创建了这个新应用,请尝试执行以下操作:

        python manage.py makemigrations <name_of_your_app>
        python manage.py migrate <name_of_your_app>
        

        您无需在单个应用中包含所有admin.site.register,您可以在admin.py 文件中的相应应用中指定它们。

        【讨论】:

          【解决方案4】:

          我有同样的问题。我的几个模型没有显示在 django admin dashbaord 中,因为我没有在我的 admin.py 文件中注册这些模型。

          //Import all the models if you have many
          
          from store.models import *
          
          admin.site.register(Order)
          admin.site.register(OrderItem)
          

          这为我解决了问题。只需注册并刷新您的网页,模型就会显示在管理仪表板中

          【讨论】:

            【解决方案5】:

            我有同样的错误,但我没有在 INSALLED_APPS

            中提及我的应用
            INSTALLED_APPS = (
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.sites',
                'django.contrib.messages',
                'django.contrib.admin',
                'myapp.apps.myappConfig',
            )
            

            我已经注册了模型,但忘记在 INSTALLED_APPS 中提及我的应用,在提及它对我有用之后

            【讨论】:

              【解决方案6】:

              您只需要注册您的模型。 进入同一个应用的 admin.py 文件并写入,

              from .models import "Modelname"
              
              admin.site.register(("Modelname")) 
              #create tuple to register more than one model
              

              【讨论】:

                【解决方案7】:

                我有同样的问题,我解决了如下 首先转到您的 app.py 文件并复制类名。

                from django.apps import AppConfig
                
                class **ResumeConfig**(AppConfig):
                name = 'resume'
                

                现在转到 setting.py 并将其放在应用程序定义中,如下所示:

                INSTALLED_APPS = [
                'django.contrib.admin',
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.messages',
                'django.contrib.staticfiles',
                **'resume.apps.ResumeConfig'**
                ]
                

                在终端中保存并运行命令

                python manage.py makemigrations
                python manage.py migrate
                

                运行您的服务器并转到 /admin 你的问题会解决的

                【讨论】:

                  【解决方案8】:

                  我有同样的问题。做对了一切。但我没有查看模型的权限。

                  只需提供所需的权限(查看/添加/编辑/等),然后再次检查。

                  使用管理面板授予权限:

                  1. 使用您的超级用户帐户的凭据登录网站。
                  2. 管理站点的顶层显示您的所有模型,按“Django 应用程序”排序。在身份验证和授权部分,您可以单击用户或组链接以查看其现有记录。
                  3. 选择并添加所需的权限

                  选择并添加所需的权限

                  请参考this 通过管理面板添加/更改权限

                  替代方案: 使用代码 参考Official Django Doc

                  【讨论】:

                    【解决方案9】:

                    如果您要注册多个模型,请使用。

                    admin.site.register((Model1 , Model2 , Model3))

                    admin.site.register([Model1 , Model2 , Model3])

                    在您的 admin.py 文件中。

                    【讨论】:

                    • 这是一个与案例无关的通用答案。这也是不准确的,因为您提出了两种不同的方法,其中一种很可能会失败。
                    • 这两个都可以正常工作。实际上,如果你想注册多个模型,那么你需要将它们添加到一个迭代中。所以你可以使用元组或列表。
                    【解决方案10】:

                    我正在使用本地代码更新远程服务器,但远程服务器仍在管理屏幕中使用旧模型。我的本地服务器和远程服务器之间的一切看起来都完全一样 - 数据库表匹配并且代码也相同。

                    问题原来是远程服务器正在使用 venv 环境运行。在运行 source venv/bin/activate 并进行迁移后,管理员显示了所有新模型。

                    【讨论】:

                      【解决方案11】:

                      报告的问题可能是因为您跳过了为管理站点注册模型。这可以做到,在您的应用程序下创建一个admin.py 文件,并在那里注册模型:

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

                      【讨论】:

                      • 这个答案是如何评价最高的?我的代码显示我确实有 admin.site.register... 并且选择的答案是正确的.. 所以 wtf...
                      • 因为人们在 Google 中输入“模型未显示在管理员中”,所以在他们找到的第一个 SO 页面上尝试所有解决方案,并为任何可行的方法投票:-D
                      • 仍然排名... XD @andyhasit 不错!
                      • 嗯,这是对整个问题的合理答案。这不是您的配置的答案。如果它被要求提供不同的配置,它将被重定向到这个作为 Dupe none-the-less。因此,赞成这个答案是正确的。这是最可能的原因。
                      • @dios231 不,假设迁移已经应用,它应该立即工作。
                      【解决方案12】:

                      要指出的另一件事是,您应该确保使用超级用户登录。

                      可能是您登录的用户对查看容量的权限有限,因此请尝试一下。

                      我在 Django 2.0 中仍然只使用应用程序的名称注册我的应用程序,即“游戏”。但问题在于登录的用户权限。

                      【讨论】:

                        【解决方案13】:

                        我所有的管理类都在一个文件夹./sites/ 中,它只是因为我有循环依赖而起作用。我修复了它们,其他一切都停止了工作。

                        当我将该目录从 ./sites/ 重命名为 ./admin/ 时,它起作用了。

                        【讨论】:

                          【解决方案14】:

                          由于我在 settings.py 中使用 ADMIN_REORDER(https://pypi.org/project/django-modeladmin-reorder/) 来控制模型顺序,我的新模型没有显示在管理页面上,添加了一段时间后忘记了。将新模型添加到 settings.py 并显示出来。

                          【讨论】:

                            【解决方案15】:

                            将您的管理员代码更改为:

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

                            还要确保应用包含在 settings.py 文件中,并确保您为模型导入了正确的名称。可能导致此问题的另一个原因是将逗号 (,) 放在模型字段的末尾,就像它是 python 列表一样。

                            【讨论】:

                              【解决方案16】:

                              我只需要重新启动 apache 服务。服务 apache2 重启。然后出现了新模型。

                              【讨论】:

                                【解决方案17】:

                                我在安装在 docker 容器中的 django 实例上遇到了类似的问题。代码是正确的,但对 admin.py 的更改没有出现在 django admin 中。

                                退出 django 进程并使用 docker-compose up 重新挂载容器后,添加的模型在 django admin 中可用。

                                【讨论】:

                                  【解决方案18】:

                                  其中一个可能的原因是您没有关闭旧的 python 进程。

                                  【讨论】:

                                  • 这应该是评论而不是答案。
                                  【解决方案19】:

                                  你只需要导入(包括)这个:

                                  from models import *
                                  

                                  【讨论】:

                                    【解决方案20】:

                                    我也为注册我的模型而苦苦挣扎(尝试了上面的所有建议),直到我做了一件非常简单的事情。我将我的 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 来解决问题。关闭/打开服务器对我不起作用。 Wtf JetBrains...
                                    【解决方案21】:

                                    在 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)
                                    

                                    由于我没有收到任何警告,所以我也想在这里指出这件事。

                                    【讨论】:

                                    • 这对我有用。一次旅行是一件非常愚蠢的事情 - 它应该记录在某个地方 - 或者发出警告/错误!
                                    【解决方案22】:

                                    我遇到了同样的问题, 重新启动后,我的开发服务器模型显示在管理页面中。

                                    【讨论】:

                                      【解决方案23】:

                                      错误可能在views.py你的“def”中,你应该检查你是否得到

                                      If mymodel.is_valid():
                                      mymodel = model.save()
                                      

                                      我会给你一段我的代码,以便你理解它

                                      @login_required(login_url='/home/')
                                      def ask_question(request):
                                      user_asking = UserAsking()
                                      
                                      if request.method == "POST":
                                          user_asking = UserAsking(request.POST)
                                      
                                          if user_asking.is_valid():
                                              user_asking.save()
                                      
                                          return redirect(home)
                                      
                                      return render(request, 'app/ask_question.html', {
                                          'user_asking': user_asking,
                                      })
                                      

                                      `UserAsking 是一种形式。 希望对你有帮助

                                      【讨论】:

                                        【解决方案24】:

                                        我也有同样的问题。我解决了这个问题,将管理员注册添加到admin.py。 而且我不需要添加额外的课程。

                                        喜欢:

                                        from jalka.game.models import Game
                                        from django.contrib import admin
                                        
                                        admin.site.register(Game)
                                        

                                        环境:Win10、Django 1.8

                                        【讨论】:

                                          【解决方案25】:

                                          对于 Django 1.10 帮助我按照以下方式注册模型最后使用 (admin.ModelAdmin)

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

                                          【讨论】:

                                          • 这对我有用并帮助我找到了一个错误,但你可能想要admin.site.register(YourModel),这是正确的方法。
                                          【解决方案26】:

                                          我正在使用数字海洋,也遇到了这个问题。解决方案是重新启动服务。我用过

                                          服务 gunicorn 重启

                                          这让模型出现了

                                          【讨论】:

                                            【解决方案27】:

                                            我还想补充一点,我做了这些答案所说的一切,除了我没有在命令行上输入 sudo service apache2 restart 以使更改生效。 (因为我在亚马逊网络服务端口 80 上的实时服务器上进行测试。我也在使用 Ubuntu 操作系统。)这为我解决了这个问题。我希望这可能对某人有所帮助。

                                            【讨论】:

                                            • 我完全知道我必须这样做,但我一直在我的本地笔记本电脑(Ubuntu,使用 django 服务器)上进行开发,其中重启是自动的,所以我忘记了这一点.直到我看到你的回答。祝福你!
                                            【解决方案28】:

                                            除了 Saff 所说的,您的 settings.py 应该是这样的:

                                            INSTALLED_APPS = (
                                                'django.contrib.auth',
                                                'django.contrib.contenttypes',
                                                'django.contrib.sessions',
                                                'django.contrib.sites',
                                                'django.contrib.messages',
                                                'django.contrib.admin',
                                                'YOUR_PROJECT',
                                                # And
                                                'YOUR_PROJECT.Foo',
                                                'YOUR_PROJECT.Bar',
                                            )
                                            

                                            【讨论】:

                                            • 为什么是Foo,为什么是Bar?那代表什么?
                                            【解决方案29】:

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

                                            我的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 的管理应用程序之前,显然它按那个顺序加载它们。我只是将我的应用移到了管理员的正下方,它就开始出现了 :)

                                            【讨论】:

                                              【解决方案30】:

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

                                              希望可以拯救某人,如果他们因我的问题而跌倒在这里。

                                              【讨论】:

                                                猜你喜欢
                                                • 1970-01-01
                                                • 2012-12-09
                                                • 2019-08-16
                                                • 2015-12-26
                                                • 2019-03-26
                                                • 2018-04-27
                                                • 2021-08-29
                                                • 2020-05-16
                                                • 2012-10-15
                                                相关资源
                                                最近更新 更多