Python Web学习记录之Django(七) -- Django Admin 管理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35737303/article/details/80469679

根据菜鸟教程,了解到这一个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',
    'startapp',  # 这是自己的应用
]

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

1. 激活管理工具

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

# urls.py
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

当这一切都配置好后,Django 管理工具就可以运行了。
启动开发服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/,得到如下界面:
这里写图片描述
通过命令 python manage.py createsuperuser 来创建超级用户,如下所示:

# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: admin@runoob.com
Password:
Password (again):
Superuser created successfully.
[root@solar HelloWorld]#

还是一直没弄懂pycharm里面怎么操作manage.py。
创建好账户后,登录该账户:
这里写图片描述
可以看到数据库中有了该账户的数据:
这里写图片描述
页面中有很多操作,可以自己点击查看或操作。不过我现在先按照菜鸟教程上走一遍,然后再查看其它的东西。
为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin。比如,我们之前在 TestModel (就是创建的那个app,我的是startapp)中已经创建了模型 Test 。修改 TestModel/admin.py:

from django.contrib import admin
from startapp.models import Test

# Register your models here.
admin.site.register(Test)

刷新后即可看到 Testmodel 数据表:
这里写图片描述

2. 复杂模型

管理页面的功能强大,完全有能力处理更加复杂的数据模型。
先在 startapp/models.py 中增加一个更复杂的数据模型:

# Create your models here.
# models.py
from django.db import models


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

注意:contact = models.ForeignKey(Contact, on_delete=models.CASCADE)是我更正后的代码,在菜鸟教程上少了后面一个参数

这里有两个表。Tag 以 Contact 为外部键。一个 Contact 可以对应多个 Tag。
我们还可以看到许多在之前没有见过的属性类型,比如 IntegerField 用于存储整数。
这里写图片描述
在 startapp/admin.py 注册多个模型并显示:

admin.site.register([Test, Contact, Tag])

刷新管理页面,显示结果如下:
这里写图片描述
这是后查看数据库,并没有为这两个模型建表,因此使用命令为其建表:

python manage.py makemigrations startapp# 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate startapp# 创建表结构

执行后显示成功:
这里写图片描述
刷新数据库得到这两个模型对应的表结构:
这里写图片描述

3. 自定义表单

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

from django.contrib import admin
from startapp.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 数据模型,我们在注册的时候,需要将它们一起注册。显示效果如下:
这里写图片描述
Contact本来有三个字段,Name,Age,Email。我们自定义只显示Name和Email字段。
还可以将输入栏分块,每个栏也可以定义自己的格式。修改 startapp/admin.py中的ContactAdmin类为:

class ContactAdmin(admin.ModelAdmin):
    # fields = ('name', 'email')
    fieldsets = (
        ['Main', {
            'fields': ('name', 'email'),
        }],
        ['Advance', {
            'classes': ('collapse',),  # CSS
            'fields': ('age',),
        }]
    )

上面的栏目分为了 Main 和 Advance 两部分。classes 说明它所在的部分的 CSS 格式(‘collapse’为折叠效果)。这里让 Advance 部分隐藏。刷新得到:
这里写图片描述

4. 内联(Inline)显示

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

# Register your models here.
from django.contrib import admin
from startapp.models import Test, Contact, Tag


# admin.site.register([Test, Contact, Tag])
class TagInline(admin.TabularInline):
    model = Tag


class ContactAdmin(admin.ModelAdmin):
    # fields = ('name', 'email')
    inlines = [TagInline]  # 内联
    fieldsets = (
        ['Main', {
            'fields': ('name', 'email'),
        }],
        ['Advance', {
            'classes': ('collapse',),  # CSS
            'fields': ('age',),
        }]
    )
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])

这里写图片描述

5. 列表页的显示

在 Contact 输入数条记录后,Contact 的列表页看起来如下:
这里写图片描述

5.1 显示字段

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

list_display = ('name','age', 'email') # list

刷新页面:
这里写图片描述

5.2 搜索功能

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

search_fields = ('name',)  # 搜索,可以添加不同的字段

这里写图片描述

菜鸟教程只提供了这几种功能,现在我对其他功能进行学习:
我们的ContactAdmin类继承了admin.ModelAdmin,ModelAdmin中有很多为给定模型封装的管理选项和功能 :
这里只是举例出能操作的部分功能,并不是实现

    list_display = ('__str__',)  # 显示字段
    list_display_links = ()  #显示被链接
    list_filter = ()  # 显示过滤
    list_select_related = False
    list_per_page = 100  # 每页显示100个数据
    list_max_show_all = 200
    list_editable = ()  #是否可编辑
    search_fields = ()  # 搜索
    date_hierarchy = None
    save_as = False
    save_as_continue = True
    save_on_top = False
    paginator = Paginator
    preserve_filters = True
    inlines = []  #内联

    # 自定义模板(被设计为在子类中过多)
    add_form_template = None
    change_form_template = None
    change_list_template = None
    delete_confirmation_template = None
    delete_selected_confirmation_template = None
    object_history_template = None
    popup_response_template = None

5.3 被链接

list_display_links可以指定哪些字段能被链接:

list_display_links = ('name', 'age')

这里写图片描述
字段变成蓝色,表示能被链接,点击后进入编辑页面。

5.4 编辑

list_editable指定字段在当前被编辑:

 list_editable = ('email',)

这里写图片描述
注意:指定在list_display_links 中的字段不能再在 list_editable指定。

5.5 显示过滤

list_filter = ('name', 'email')

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_35737303/article/details/80469679