08 Django -- ORM 多表操作

多表查询

admin:

​ 输入:createsuperuser,配置账户密码

admin.py文件下注册表:

admin.site.register

增加

一对一:

Author------>AuthorDetail

方式1: 关联字段名 = 数据

方式2: 关联属性=对象(另一张表对应的model对象)

author_detail_obj=models.AuthorDetail.objects.get(id=4)

models.Author.objects.creater(
	name='alex',
	age=18
	auth_id=4	# 方式一,4是AuthorDetail中的id
	# auth=author_detail_obj # 方式二
	)

多对一:

Book------->Publish

pub_obj = models.Publish.objects.get(id=4)

models.Book.objects.create(
	title='xxx',
	publishDate='2011-11-11',
	price=100,
	publishs_id=3,	# 方式一
	publishs=pub_obj	# 方式二
	
	)

多对多:

Book------>Author

通过authors属性操作第三张表。

book_obj.authors.add(1,3)
# 或者:
book_obj.authors.add(*[1,3]) 
# 书是由id=1和id=3的作者编写的
# authors是关联属性

# 也可通过add添加对应作者的对象(同上)

删除: 级联

一对一

models.Author.objects.filter(id=3).delect()

多对一

models.Book.objects.filter(id=3).delect()

多对多:

通过关联属性操作第三张表

book_obj = models.Book.objects.get(id=2) # 书籍id=2

book_obj.authors.remove(1)	# 删除id=1的作者的关系

book_obj.authors.clear()	# 清除 id=2书籍对应的所有作者关系

book_obj.authors.set(['1','3'])	# 先清除后添加 id=1,id=3的作者	

models.Book.objects.filter(id=2).update(
	title='ooo',
	publishs_id=1
)

正向查询与反向查询:

关系属性(字段)写在哪个类(表)里面,当从当前类(表)的书籍去查询它关联的类(表)的数据时,称正向查询。反之为反向查询。

查询:

一对一:

正向查询:依靠关联属性名称

Author---->AuthorDetail

# 查询 alex 的手机号码
author_obj = models.Author.objects.filter(name='alex')
print(author_obj.authors.telephone)

# authors是关联属性名称

反向查询:依靠关联类名(小写)

AuthorDetail---->Author

# 查询110这个电话号是谁的
author_detail_obj=models.AuthorDetail.objects.get(telephone='110')
print(author_detail_obj.author.name)

# author是Author类名的小写

多对一

正向查询: 依靠关联属性名称

Book------>Publish

# 查询一下 xxx 这本书的出版社
book_obj = models.Book.objects.get(title='xxx')

print(book_obj.publishs.name)

# publishs是关联属性名称

反向查询: 依靠关联类名小写_set

Publish------>Book

# 查询 人民出版社 出版了那些书

pub_obj = models.Publish.objects.get(name='人民出版社')
print(pub_obj.book_set.all())	# 返回QuerySet类型

# book_set是Book小写+_set

多对多

正向查询:依靠关联属性名称

Book---->Author

# 查看 xxx 这本书的作者是谁

book_obj=models.Book.objects.get(title='xxx')
print(book_obj.authors.all())

#authors是多对多关联属性名称

反向查询:

Author---->Book

# 查看 alex 写了那些书
author_obj = models.Author.objects.filter(name='alex')
print(author_obj.book_set.all())

# book_set是Book小写+_set

admin系统

admin注册

admin.py文件

from django.contrib import admin

# Register your models here.

from app01 import models

admin.site.register(models.Author)
admin.site.register(models.AuthorDetail)
admin.site.register(models.Publish)
admin.site.register(models.Book)

admin添加用户

python manage.py createsuperuser
输入用户名:yan
邮箱不用输 直接回车
输入密码:必须超过8位,并且别太简单
posted @ 2019-10-14 21:52  SensorError  阅读(127)  评论(0编辑  收藏  举报