首页 > 其他 > 详细

61 Django -- ORM 多表操作

时间:2019-10-14 22:41:04      阅读:81      评论:0      收藏:0      [点我收藏+]

多表查询

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位,并且别太简单

61 Django -- ORM 多表操作

原文:https://www.cnblogs.com/yzm1017/p/11674438.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!