10

作为 django 新手(我对 turbogears 和 Bottle 等其他 python 网络框架有一些经验,但正在探索 django)我正在尝试为我的应用程序模型自动创建管理管理

在主要的 URLS.py 中,我有:

编辑

from django.contrib import admin
admin.autodiscover()

在那之后:

urlpatterns = patterns('',
                       url(r'^appname/',include('appname.urls')),
                       url(r'^admin/',include(admin.site.urls)) 

请注意,这是在主 urls.py 中,而不是在应用程序 urls.py 中

按照教程(在教程中对我有用..)我在 appname 文件夹中创建了一个“admin.py”文件,并在那里:

from appname.models import Appname
from django.contrib import admin


class appnameAdmin(admin.ModelAdmin):
        fieldsets = [various field sets and fields etc ]

admin.site.register(Appname,AppnameAdmin)

在setting.py中我没有注释

'django.contrib.admin'

我在命令行窗口中没有收到任何错误,并且确实出现了基本管理屏幕(身份验证和站点)

我在 manage.py shell 中检查了 admin.py 中的导入,一切似乎都正常,我还尝试将 AppnameAdmin 类注释掉并仅注册:

admin.site.register(Appname) 

但这也没有用

我猜我遗漏了一些明显的东西 - 我很乐意帮忙

使用 django 1.4 + python 2.72

4

8 回答 8

11

检查所有这些

激活 Django 管理站点有七个步骤:

  1. 将“django.contrib.admin”添加到您的 INSTALLED_APPS 设置中。
  2. 管理员有四个依赖项——django.contrib.auth、django.contrib.contenttypes、django.contrib.messages 和 django.contrib.sessions。如果这些应用程序不在您的 INSTALLED_APPS 列表中,请添加它们。
  3. 将 django.contrib.messages.context_processors.messages 添加到 TEMPLATE_CONTEXT_PROCESSORS 并将 MessageMiddleware 添加到 MIDDLEWARE_CLASSES。(默认情况下这两个都是活动的,所以如果你手动调整了设置,你只需要这样做。)
  4. 确定您的应用程序的哪些模型应该在管理界面中是可编辑的。
  5. 对于这些模型中的每一个,可以选择创建一个 ModelAdmin 类,该类封装了该特定模型的定制管理功能和选项。
  6. 实例化一个 AdminSite 并告诉它你的每个模型和 ModelAdmin 类。
  7. 将 AdminSite 实例挂接到您的 URLconf 中。
  • 您已安装的应用程序中是否有所有其他管理依赖项?
  • admin.autodiscover()的 URLS.py 中有吗?

另外,我认为您的代码应该看起来更像这样:

from projectname.appname.models import Appname
from django.contrib import admin


class AppnameAdmin(admin.ModelAdmin):
        fieldsets = [various field sets and fields etc ]

admin.site.register(Appname,AppnameAdmin)
于 2012-05-27T06:44:09.980 回答
7

您是否重新启动了服务器进程?

也许这对某人有帮助:在我的情况下,问题是通过停止和启动服务器进程来解决的,因为当您添加新admin.py文件时,它不会自动重新加载。

于 2017-02-15T21:15:06.190 回答
4

aaargghhh - 我发现了问题。我将 admin.py 保存在 template/appname/ 文件夹中,而不是 appname/ 文件夹中。我真傻。很抱歉打扰了。

于 2012-05-28T20:35:17.537 回答
3

在您的模型管理员中设置:

def has_add_permission(self, request, obj=None):
    return True
def has_change_permission(self, request, obj=None):
    return True
def has_delete_permission(self, request, obj=None):
    return True
于 2013-06-10T14:37:23.967 回答
0

以上没有对我有用。

然后我转到设置,在 Project:MyApp Project Interpreter 下我将 Project Interpreter 从 Python 3.8(venv) 切换到 Python 3.8(MyApp)

然后我所有注册的模型(可以列出它们http://localhost:8000/admin/

奇怪的是,还在admin.py“admin.site”之后。注册的方法不会被列为可用。但无论如何它都有效。

于 2020-06-26T14:09:08.250 回答
0

转到 models.py 文件并在您的类中添加“models.Model”作为参数。

例子:

class className(models.Model)

在您的情况下,使用下面的类名,它将 100% 为您工作。

class AppnameAdmin(models.Model):
于 2019-09-20T07:12:21.670 回答
0

检查所有这些:

  1. 重新启动服务器并再次检查

  2. 在 models.py 文件中的类中添加“models.Model”作为参数


    class Classname(models.Model):

  1. 在settings.py的“INSTALLED_APPS”中添加您的应用程序,在我的情况下,它是“travello.apps.TravelloConfig”
    INSTALLED_APPS = [
        'travello.apps.TravelloConfig',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
  1. 在主urls.py中添加 'admin.autodiscover()'

    from django.contrib import admin
    from django.urls import path, include
    admin.autodiscover()

    urlpatterns = [
        path('', include('travello.urls')),
        path('admin/', admin.site.urls),
    ]

它对我有用!

于 2020-06-18T08:09:07.483 回答
-1

请考虑某些模型只能从超级用户看到。尝试创建一个并使用该用户登录管理员。

python3 manage.py createsuperuser
于 2022-02-02T21:06:45.380 回答