2020-10-14

Django——多表操作之模型创建,一对多添加记录,多对多添加修改删除记录,多对多其他api

一、多表操作之模型创建

1 图书表:book,作者表:author,作者详情表:authordetail,出版社表:publish,(第三张中间表)2 作者跟作者详情:是一对一,关联字段写在哪一方都可以3 图书跟出版社:是一对多,一对多关系一旦确立,关联字段写在多的一方4 图书和作者:是多对多,多对多的关系需要建立第三张表(可以自动生成)5 models.py中把关系建立出来from django.db import models### django: 1.11.1  2.0.7# Create your models here.class Publish(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) addr = models.CharField(max_length=64) phone = models.CharField(max_length=64) email = models.EmailField()class Book(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.DecimalField(max_digits=6, decimal_places=2) publish_date = models.DateTimeField(auto_now_add=True) # to='Publish'跟Publish表做关联(ForeignKey,一对多) # to_field='id'跟哪个字段做关联 # publish=models.CharField(max_length=32) # publish=models.ForeignKey(to='Publish',to_field='id') # publish = models.ForeignKey(to='Publish') # 不写,默认跟主键做关联 publish = models.ForeignKey(to=Publish) # 不写,默认跟主键做关联 # 自动创建出第三张表(这句话会自动创建第三章表) # authors在数据库中不存在该字段,没有to_field # 默认情况:第三张表有id字段,当前Book表的id和Author表的id字段 authors=models.ManyToManyField(to='Author')class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.SmallIntegerField() # 一对一的本质是 ForeignKey+unique author_detail=models.OneToOneField(to='AuthorDetail',to_field='id') # author_detail=models.ForeignKey(to='AuthorDetail',to_field='id',unique=True)class AuthorDetail(models.Model): id = models.AutoField(primary_key=True) sex = models.SmallIntegerField() addr = models.CharField(max_length=64) phone = models.BigIntegerField()  6 同步到mysql数据库 -配置文件 -pymysql.install_as_mysqldb()  -公司可以用过的mysqlclient -两条命令 7 2.x版本的django -外键字段必须加 参数:on_delete -1.x版本不需要,默认就是级联删除 -假设,  删除出版社,该出版社出版的所有图书也都删除,on_delete=models.CASCADE  删除出版社,该出版社出版的图书不删除,设置为空on_delete=models.SET_NULL,null=True  删除出版社,该出版社出版的图书不删除,设置为默认on_delete=models.SET_DEFAULT,default=0

二、一对多添加记录

publish=models.Publish.objects.create(name='北京出版社',addr='北京',phone='0536-12345678',email='邮箱地址') # 新增金梅图书book=models.Book.objects.create(name='金梅',price='23.45',publish=publish)# publish=对象 # book=models.Book.objects.create(name='西游记',price='23.55',publish_id=1)# publish_id=数字 # 新增西游记book=models.Book.objects.create(name='西游记',price='23.55',publish_id=publish.id)# publish_id=数字# 总结: 1 email可以不传email,本质就是varchar(admin中会判断) 2 新增图书:  -publish=publish  -publish_id=publish.id 3 写在表模型中的publish字段,到数据库中会变成publish_id(ForeignKey) 4 查到book对象以后  -book.publish  对象  -book.publish_id id号,数字

三、多对多添加记录,修改,删除

1 自动创建的表,表模型就拿不到,book.authors代指表模型 # 多对多,作者和书 # 给西游记这本书新增两个作者lqz和egon # 去到西游记这本书 # book=models.Book.objects.get(name='西游记') # 代指中间表book.authors # lqz=models.Author.objects.get(id=2) # egon=models.Author.objects.get(id=3) # book.authors.add(2,3) # 新增作者,通过id新增 # # book.authors.add(lqz,egon) # 新增作者,通过对象新增 # book.authors.add(2,egon) # 新增作者,通过对象新增 # 西游记删除一个作者 # book = models.Book.objects.get(name='西游记') # book.authors.remove(2) # egon = models.Author.objects.get(id=3) # book.authors.remove(egon) # clear 清空所有作者 book = models.Book.objects.get(name='西游记') # book.authors.add(2, 3) # book.authors.clear() # set 先清空,再add,前提是不存在的作者 book.authors.set([4, ])  # add ,remove,set clear

四、多对多其他api

# 详见 add ,remove,set clear

 

原文转载:http://www.shaoqun.com/a/481072.html

斑马物流:https://www.ikjzd.com/w/1316

epc:https://www.ikjzd.com/w/488

kili:https://www.ikjzd.com/w/238


一、多表操作之模型创建1图书表:book,作者表:author,作者详情表:authordetail,出版社表:publish,(第三张中间表)2作者跟作者详情:是一对一,关联字段写在哪一方都可以3图书跟出版社:是一对多,一对多关系一旦确立,关联字段写在多的一方4图书和作者:是多对多,多对多的关系需要建立第三张表(可以自动生成)5models.py中把关系建立出来fromdjango.dbimpo
瀚霖:https://www.ikjzd.com/w/2345
雨果网:https://www.ikjzd.com/w/1307
突发!亚马逊美国站限制卖家补货!还有这个小道消息,马上行动起来!:https://www.ikjzd.com/home/125626
7大技巧带你走出亚马逊CPC广告误区!:https://www.ikjzd.com/home/6482
注意!下半年旺季是亚马逊跟卖狗疯狂作恶的季节:https://www.ikjzd.com/home/105980

No comments:

Post a Comment