django 后台 管理models

1、CRUD
1、查询
1、Entry.objects.all()
2、Entry.objects.all().values('','')
3、Entry.objects.order_by()
4、Entry.objects.exclude(条件)
5、Entry.objects.get(条件)
只能返回一条数据时使用
6、Entry.objects.filter(条件|查询谓词)
Author.objects.filter(id=1,age=10)
Author.objects.filter(id__gte=10)
2、增加数据
1、Author.objects.create(属性=值)
2、obj = Author(属性=值)
obj.save()
3、
dic = {'属性':'值'}
obj = Author(**dic)
obj.save()
3、修改数据
1、单条记录
obj = Author.objects.get(id=1)
obj.属性=值
obj.save()
2、批量修改
Author.objects.all().update(属性=值)
4、删除
1、删除单个对象
Author.objects.get(id=1).delete()
2、删除多个对象
Author.objects.all().delete()
5、F()操作 和 Q()操作
1、F()操作
作用:获取某列的值
from django.db.models import F


Author.objects.all().update(age=F('age')+10)
2、Q()操作
查询Author中id小于等于10或年龄大于等于35
from django.db.models import Q
Author.objects.filter(Q(id__lte=10)|Q(age__gte=35))
6、原生的数据操作
1、查询
函数:raw()
语法:Entry.objects.raw(sql)
2、增删改
def execute(request):
with connection.cursor() as cursor:
sql = ""
cursor.execute(sql)
... ...
===========================================
1、使用后台管理Models
后台登录地址:http://localhost:8000/admin
1、创建后台管理员
./manage.py createsuperuser
Username:
Email Address:
Password:
Password(again):
2、基本管理
1、在应用中的admin.py中注册要管理的数据
1、admin.py
作用:注册需要管理的Models,只有在此注册的Model才允许被管理,否则无法管理
2、注册Model
from .models import *
admin.site.register(Entry)
ex:
admin.site.register(Author)
3、修改 models.py 处理显示内容
后台默认效果可读性不高
在models.py中的各个 class 中追加


def __str__(self):
return self.name
4、通过内部类Meta实现展现的属性
允许为每个 model 类设置内部类 Meta 来设置起展现形式


class Author(models.Model):
.... ....
.... ....
.... ....


class Meta:
1、db_table : 指定该实体类对应到表的名称
2、verbose_name : 定义该实体类在 admin 中显示的名字(单数形式)
3、verbose_name_plural : 效果同上,是复数形式
4、ordering :在后台显示数据时的排序规则,取值为一个 列表,默认是按升序,降序的话则添加 '-'
3、高级管理
1、在 admin.py 中创建管理类,实现高级管理功能
1、定义 EntryAdmin 类,继承自 admin.ModelAdmin
class AuthorAdmin(admin.ModelAdmin):
pass
2、注册 高级管理类
admin.site.register(Entry,EntryAdmin)


admin.site.register(Author,AuthorAdmin)
3、允许在EntryAdmin增加的属性
1、list_display
作用:在显示实体信息的页面上,都显示哪些字段
取值:由属性名组成的元组或列表
ex:
list_display=('name','age','email')
2、list_display_links
作用:定义能够链接到具体实体页面的链接们
取值:由属性名组成的元组或列表
注意:取值要必须出现在 list_display 中
ex:
list_display_links=('name','email')
3、list_editable
作用:定义在列表页面中允许被修改的字段
取值:由属性名组成的元组或列表
注意:list_editable的值不能出现在list_display_links中
4、search_fields
作用:添加允许被搜索的字段
取值:由属性名组成的元组或列表
5、list_filter
作用:在列表的右侧增加过滤器,实现快速筛选
取值:由属性名组成的元组或列表
6、date_hierarchy
作用:在顶部增加一个时间选择器,所以取值必须是 DateField 或 DateTimeField 的列
7、fields
作用:在实体的详细页面中,显示哪些属性,并按照什么样的顺序显示
取值:由属性名组成的元组或列表
8、fieldsets
作用:在实体的详细页面中,对属性进行分组
注意:fieldsets 与 fields 不能共存
语法:
fieldsets=(
('分组名称',{'fields':(属性1,属性2),'classes':('collapse')}),
)
练习:
1、为Publisher增加高级管理功能
1、在实体列表页上显示 name,address,city属性
2、address和city是可以被编辑的
3、点击 name 时能够进入到实体详细页面中
4、右侧增加一个过滤器,允许按照address 和 city 进行筛选
5、分组显示
name,address,city 为基本选项
country,website 为可选选项,并可以折叠
2、Django连接查询
1、一对一映射(1:1)
1、什么是一对一
A表中的一条记录只能与B表中的一条记录匹配关联
典型代表:一夫一妻制
数据库中的实现:
A表:设计主键
B表:有主键,增加一列,并引用A表中的主键值,还得增加一个唯一约束
2、语法
属性 = models.OneToOneField(Entry)


3、查询
class Wife(models.Model):
.... ....
author = models.OneToOneField(Author)


正向查询:通过 wife 找 author
w = Wife.objects.get(id=1)
a = w.author


反向查询:通过 author 找 wife
a = Author.objects.get(id=1)
w = a.wife


wife 是由Django通过OneToOneField在Author中默认增加的一个属性
2、一对多映射(1:M)
1、什么是一对多
A表中的一条数据可以与B表中的任意多条数据匹配


比如 出版社 和 书籍 之间的关系


2、语法
使用 外键(Foreign Key)
属性 = models.ForeignKey(实体类)


ex:
Book(M) 和 Publisher(1)


class Book(models.Model):
... ...
publisher = models.ForeignKey(Publisher)
3、查询
Book(M) 和 Publisher(1)


class Book(models.Model):
... ...
publisher = models.ForeignKey(Publisher)


1、正向查询 - 通过 Book 查询 Publisher
book = Book.objects.get(id=1)
publisher = book.publisher
2、反向查询 - 通过 Publisher 查询 Book
publisher = Publisher.objects.get(id=1)
通过 publisher.book_set.all()得到所有的关联数据
bookSet = publisher.book_set.all()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值