Python教程 专题
您的位置:python > Python教程 专题 > Django Admin 管理工具
Django Admin 管理工具
作者:--    发布时间:2019-11-20

django 提供了基于 web 的管理工具。

django自动管理工具是django.contrib的一部分。你可以在项目的 settings.py 中的installed_apps看到它:

installed_apps = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

django.contrib是一套庞大的功能集,它是django基本代码的组成部分。


激活管理工具

通常我们在生成项目时会在urls.py中自动设置好,我们只需去掉注释即可。

配置项如下所示:

from django.contrib import admin
admin.autodiscover()

# and include this urlpattern...
urlpatterns = patterns('',
    # ...
    (r'^admin/', include(admin.site.urls)),
    # ...
)

当这一切都配置好后,django管理工具就可以运行了。


使用管理工具

启动开发服务器,然后在浏览器中访问:http://yoursite:8000/admin/,得到如下界面:


为了让admin界面管理某个数据模型,我们需要先注册该数据模型到admin。比如,我们之前在 testmodel 中已经创建了模型 test 。修改 testmodel/admin.py:

from django.contrib import admin
from testmodel.models import test

# register your models here.
admin.site.register(test)

刷新后即可看到 testmodel 数据表:



复杂模型

管理页面的功能强大,完全有能力处理更加复杂的数据模型。

先在 testmodel/models.py 中增加一个更复杂的数据模型:

from django.db import models

# create your models here.
class contact(models.model):
    name   = models.charfield(max_length=200)
    age    = models.integerfield(default=0)
    email  = models.emailfield()
    def __unicode__(self):
        return self.name

class tag(models.model):
    contact = models.foreignkey(contact)
    name    = models.charfield(max_length=50)
    def __unicode__(self):
        return self.name

这里有两个表。tag以contact为外部键。一个contact可以对应多个tag。

我们还可以看到许多在之前没有见过的属性类型,比如integerfield用于存储整数。


在 testmodel/admin.py 注册多个模型并显示:

from django.contrib import admin
from testmodel.models import test,contact,tag

# register your models here.
admin.site.register([test, contact, tag])

刷新管理页面,显示结果如下:


在以上管理工具我们就能进行复杂模型操作。


自定义表单

我们可以自定义管理页面,来取代默认的页面。比如上面的"add"页面。我们想只显示name和email部分。修改 testmodel/admin.py:

from django.contrib import admin
from testmodel.models import test,contact,tag

# register your models here.
class contactadmin(admin.modeladmin):
    fields = ('name', 'email')

admin.site.register(contact, contactadmin)
admin.site.register([test, tag])

以上代码定义了一个contactadmin类,用以说明管理页面的显示格式。

里面的fields属性定义了要显示的字段。

由于该类对应的是contact数据模型,我们在注册的时候,需要将它们一起注册。显示效果如下:


我们还可以将输入栏分块,每个栏也可以定义自己的格式。修改testmodel/admin.py为:

from django.contrib import admin
from testmodel.models import test,contact,tag

# register your models here.
class contactadmin(admin.modeladmin):
    fieldsets = (
        ['main',{
            'fields':('name','email'),
        }],
        ['advance',{
            'classes': ('collapse',), # css
            'fields': ('age',),
        }]
    )

admin.site.register(contact, contactadmin)
admin.site.register([test, tag])

上面的栏目分为了main和advance两部分。classes说明它所在的部分的css格式。这里让advance部分隐藏:


advance部分旁边有一个 show 按钮,用于展开,展开后可点击 hide 将其隐藏,如下图所示:



内联(inline)显示

上面的contact是tag的外部键,所以有外部参考的关系。

而在默认的页面显示中,将两者分离开来,无法体现出两者的从属关系。我们可以使用内联显示,让tag附加在contact的编辑页面上显示。

修改testmodel/admin.py:

from django.contrib import admin
from testmodel.models import test,contact,tag

# register your models here.
class taginline(admin.tabularinline):
    model = tag

class contactadmin(admin.modeladmin):
    inlines = [taginline]  # inline
    fieldsets = (
        ['main',{
            'fields':('name','email'),
        }],
        ['advance',{
            'classes': ('collapse',),
            'fields': ('age',),
        }]

    )

admin.site.register(contact, contactadmin)
admin.site.register([test])

显示效果如下:



列表页的显示

在contact输入数条记录后,contact的列表页看起来如下:

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册