django xadmin自定义页面_Django中的Admin管理工具

本文详细介绍了如何利用Django的Admin工具进行模型管理,包括自定义表单、内联展示、列表页定制、搜索功能及高级功能的实现。通过实例演示了如何创建复杂的后台管理系统,以及如何根据业务需求调整界面显示和功能配置。
摘要由CSDN通过智能技术生成

Django admin自动管理工具是 django.contrib 的一部分,我们可以在项目的 settings.py文件的 INSTALLED_APPS设置中看到它,可以将它看成django本身自带的一个app应用程序。

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文件中添加url(r'^admin/' ,admin.site.urls),一般在生成项目时会自动设置好,我们只需要去掉注释就行。

from django.conf.urls import urlfrom django.contrib import adminurlpatterns = [ url(r'^admin/', admin.site.urls),]

使用管理工具

启动开发服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/,得到登陆界面,如下图所示:

30f064fad411f40a86d8f1adca8131b1.png

接着可以通过命令 python manage.py createsuperuser来创建超级用户。

>> python manage.py createsuperuser​Username (leave blank to use 'root'): 用户名Email address: 邮箱Password: 密码Password (again): 确认密码Superuser created successfully.

创建好超级用户之后我们可以在刚刚的那个登录界面输入用户名和密码,登录成功后的界面如下所示:

307a7f21a32b2f4364bef5c15bfc4041.png

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

from django.contrib import adminfrom TestApp.models import Test​# Register your models here.admin.site.register(Test)

在网页中刷新后即可看到TestApp数据表,如下图:

71a19941c69436555aaa2f1dba5b55a6.png

复杂的后台数据模型

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

首先我们可以在TestApp/models.py文件中增加两个表(数据模型):

from django.db import models​# Create your models here.class Test(models.Model): name = models.CharField(max_length=20)​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, on_delete=models.CASCADE, ) name = models.CharField(max_length=50) def __unicode__(self): return self.name

上述两个表中,Tag以Contact为外部键。一个Contact可以对应多个Tag。

在TestApp/admin.py文件中注册多个模型并显示:

from django.contrib import adminfrom TestApp.models import Test,Contact,Tag​# Register your models here.admin.site.register([Test, Contact,Tag])

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

b0a507b2648c41ba131a710411f888e1.png

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

自定义表单

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

from django.contrib import adminfrom TestApp.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 数据模型,我们在注册的时候,需要将它们一起注册。显示效果如下:

88c0478df0da644cbd2dc31ce263f82e.png

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

from django.contrib import adminfrom TestApp.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 部分隐藏:

dfcb179799a98c8c525ad7a1ca648c13.png

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

ae33d17df8189d886b5fffb12564b955.png

内联(Inline)显示

上面的 Contact 是 Tag 的外部键,所以有外部参考的关系。而在默认的页面显示中,将两者分离开来,无法体现出两者的从属关系。我们可以使用内联显示,让 Tag 附加在 Contact 的编辑页面上显示。

修改TestApp/admin.py:

from django.contrib import adminfrom TestApp.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])

访问页面后的效果图如下所示:

1154c038af7ed151ade49489f6e2020b.png

列表页的显示

我们也可以自定义Contact 的列表页的显示,比如在列表中显示更多的栏目,只需要在 ContactAdmin 中增加 list_display 属性:

from django.contrib import adminfrom TestApp.models import Test, Contact, Tag​# Register your models here.class TagInline(admin.TabularInline): model = Tag​class ContactAdmin(admin.ModelAdmin): list_display = ('name', 'age', 'email') # list inlines = [TagInline] # Inline fieldsets = ( ['Main', { 'fields': ('name', 'email'), }], ['Advance', { 'classes': ('collapse',), 'fields': ('age',), }]​ )​admin.site.register(Contact, ContactAdmin)admin.site.register([Test])

刷新页面后效果如图所示:

6ca60d9964abcb2f01bc17817791c70f.png

搜索功能

搜索功能在管理大量记录时非常有,我们可以使用 search_fields 为该列表页增加搜索栏:

from django.contrib import adminfrom TestApp.models import Test, Contact, Tag​# Register your models here.class TagInline(admin.TabularInline): model = Tag​class ContactAdmin(admin.ModelAdmin): list_display = ('name', 'age', 'email') # list search_fields = ('name',) inlines = [TagInline] # Inline fieldsets = ( ['Main', { 'fields': ('name', 'email'), }], ['Advance', { 'classes': ('collapse',), 'fields': ('age',), }]​ )​admin.site.register(Contact, ContactAdmin)admin.site.register([Test])

参考:https://www.9xkd.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值