Django day05 模型查询,修改,删除,转发&重定向 后台基本管理,高级管理

目录

1.Models - 模型

    1.查询

        2.根据条件查询部分行数据(重难点)

    2.修改

    3.删除

    4.转发 & 重定向

    5.F查询 和 Q查询

 2.使用后台管理Models

    1.创建后台管理员

    2.基本管理

    3.高级管理

        1.在admin.py中创建高级管理类

        2.允许在EntryAdmin中增加的管理属性

练习代码 https://blog.csdn.net/zh__quan/article/details/82155617

 


1.Models - 模型

    1.查询

        1.只查询一条数据
            语法:get()
            用法:Entry.objects.get()
            注意:
                适合于只能查询一条数据时使用
                查询多于一条结果或没查询出结果时都会抛异常

        2.根据条件查询部分行数据(重难点)

            语法:filter(条件)  
            用法:Entry.objects.filter(条件)
            1.使用Entry中的属性作为查询条件
                如果有多个查询条件的话,使用 ,隔开,映射到sql语句中,一律使用and进行关联
                ex:
                    1.Author.objects.filter(id=1)
                        select * from index_author where id=1
                    2.Author.objects.filter(id=1,name='老舍')
                        select * from index_author where id=1 and name='老舍'
            2.使用Field Lookups(查询谓词)完成复杂条件查询
                查询谓词:每一个独立的查询谓词就是一个独立的查询条件
                    所有支持使用查询条件的位置处,都允许使用 查询谓词
                        filter(),get(),exclude()
                    Entry.objects.filter(属性__查询谓词=值)

                练习:
                    在Author 实体中,查询所有email中包含字符'a'的Author的信息
                        Author.objects.filter(email__contains='a')

    2.修改

        1.修改单个数据

            1.查
                通过get()得到要修改的实体对象
            2.改
                通过实体对象的属性修改值
            3.保存
                通过实体对象的save()保存回数据库

            练习:
                1.将id为1的Author的name属性值修改为 舒庆春
                    au = Author.object.get(id=1)
                    au.name = '舒庆春'
                    au.save()

        2.批量修改数据

            调用查询结果集的update(属性=值,属性=值)实现批量修改
            将age=85的author的信息的email更改为[email protected]
            Author.objects.filter(age=85).update(email='[email protected]')

    3.删除

        调用实体对象/查询结果集的 delete() 可以完成删除

        1.删除单个对象
            au = Author.objects.get(id=1)
            au.delete()
        2.删除多个对象
            auList = Author.objects.filter(age__gte=58)
            auList.delete()

        练习:
            1.Author实体中增加一个列,isActive(BoolenaField),默认值为True
            2.删除:将对应author的isActive更改为False
            3.查询:只查询出isActive为True的信息,其余的不查询 

    4.转发 & 重定向

        1.转发
            将请求转交给其他的视图去处理
            表现:地址栏不会发生改变
            原因:只有一次请求,所以地址栏上就是最初请求的地址

        2.重定向
            重新向新的地址发送请求
            语法:
                HttpResponseRedirect('重定向地址')
                redirect('重定向地址')
            表现:地址栏会实现最后一次请求的地址
            原因:重定向导致浏览器向服务器发送了两次请求

    5.F查询 和 Q查询

        1.F()
            作用:用于在执行中获取某列的值
            语法:
                from django.db.models import F
                F('列名')
                Author.objects.all().update(age=F('age')+10)
        2.Q()
            作用:在查询条件中完成或(or)的操作
            语法:
                from django.db.models import Q
                Q(条件1)|Q(条件2)
                #查询id为1 或 年龄大于100的人的信息
                Author.objects.filter(Q(id=1)|Q(age__gt=100))

 2.使用后台管理Models

    1.创建后台管理员

        ./manage.py createsuperuser
        Username:输入用户名,默认为...     
        Email Address:输入电子邮件地址
        Password:输入密码
        Password(again):确认密码

    2.基本管理

        1.在应用中的 admin.py 中注册要管理的Models
            1.admin.py
                作用:注册要管理的Models,只有在此注册Models才允许被管理
            2.注册 Models
                from .models import *
                from django.contrib import admin

                admin.site.register(Entry)

        2.修改models.py去处理显示的内容
            1.在models.py中的各个class追加
                def __str__(self):
                    return self.name
            2.为各个class中的属性增加字段说明
                verbose_name='显示名称'
                ex
                    name=models.CharField(max_length=30,verbose_name='姓名')
            3.为各个class追加内部类 Meta
                class Entry(models.Model):
                    ... ...
                    ... ...
                    class Meta:
                        1.db_table
                            指定该实体对应到表的名称,取值为字符串
                            该操作必须先同步回数据库
                        2.verbose_name
                            指定该实体类在admin中显示的名字(单数)
                        3.verbose_name_plural
                            指定该实体类在admin中显示的名字(复数)
                            verbose_name_plural = verbose_name
                        4.ordering
                            指定实体信息们在列表页的排序规则
                            取值是一个列表,默认按升序排序,降序的话使用"-"

    3.高级管理

        1.在admin.py中创建高级管理类

            1.定义高级管理类 - EntryAdmin
                必须继承自 admin.ModelAdmin
                ex:
                    class AuthorAdmin(admin.ModelAdmin):
                        pass
            2.注册高级管理类
                admin.site.register(Entry,EntryAdmin)

        2.允许在EntryAdmin中增加的管理属性

            1.list_display
                作用;指定在列表页中能够显示的字段们
                取值:由属性名组成的元组或列表
            2.list_display_links
                作用:定义在列表页中也能够链接到详情页的字段们
                取值:同上
                注意:取值必须出现在list_display中
            3.list_editable
                作用:指定在列表页中就允许被修改的字段们
                取值:取值必须出现在list_display中但不能出现在list_display_links中
            4.search_fields
                作用:指定允许被搜索的字段们
                取值:同上
            5.list_filter
                作用:在列表页的右侧增加一个过滤器,允许实现快速筛选
                取值:同上
            6.date_hierarchy
                作用:在列表页的顶部增加一个时间选择器
                取值:取值必须是DateField 或 DateTimeField
            7.fields
                作用:在详情页面上,要显示哪些字段并按照什么样的顺序显示
            8.fieldsets
                作用:在详情页面中对字段们进行分组显示
                注意:fieldsets 与 fields 是不能共存的
                取值:
                    fieldsets = (
                        #分组1
                        (
                            "分组名称",{
                                'fields':('属性1','属性2'),
                            }
                        )
                        #分组2
                        ()
                    )

            作业:
                为 Publisher 增加管理功能
                1.基本功能
                    1.指定每个列所显示的名称
                    2.指定表名为 publisher
                    3.指定每个实体对象在列表页中所显示的中文名
                2.高级功能
                    1.在列表页中显示name,address,city属性值
                    2.address 和 city 是可编辑的
                    3.右侧显示过滤器,允许按照 city 和 country 进行筛选
                    4.分组显示
                        name,address,city 为基本选项
                        country,website为高级选项,并可折叠

练习代码 https://blog.csdn.net/zh__quan/article/details/82155617

猜你喜欢

转载自blog.csdn.net/zh__quan/article/details/82155966