• django bms


    1.

    创建模型

    一对多:

    需要在""多""的表创建一个""关键字段"" 关联  就像在mysql的哪项少的比如(书与出版社之间在书之间创建一个关联字段public_id 对应着出版社的主键) 

    语法:在""多的"" 那边添加 

    1     # 与Publish建立一对多的关系,外键字段建立在多的一方
    2     publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE)
    3 #publish意味着publish_id 关联字段,无需添加id jdango自动添加
    4 #,on_delete=models.CASCADE 级联删除
    5 #to="Publish" 指向 少  的
    一对多

    多对多

    在mysql中需要创建 一个共同的表,但是在django无需这样 

    注意:

    1 authors=models.ManyToManyField(to="Author")
    2 #这里注意  ManyToManyField在django生成的是一个表(记住了)
    3 book_author 表里面含有book_id author_id
    4 这里无需加级联删除,因为只有一个
    多对多

    一对一

    同一对多,唯一区别是 ""关联字段"" 是惟一的 unique

    1 ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
    2 这里OneToOneField 在django默认省略 unique 生成字段
    一对一

    创建

    查询

     1 # 跨表查询,基于对象
     2 from app01.models import Book,Publish,Author,AuthorDetail
     3 # def books(request):
     4     # 一对多添加
     5     # 方式一 找出存储的出版社地址为条件,找到对象 然后将publish=找到的对象
     6     # pub_obj=Publish.objects.filter(name="云南出版社").first()
     7     # Book.objects.create(title="python",price="100",pub_date="2018-10-17",publish=pub_obj)
     8     # 方式二 在对象里添加publish_id=对应的主键
     9     # Book.objects.create(title="linux", price="100", pub_date="2018-10-17", publish_id=1)
    10     # return  HttpResponse("OK")
    11 #     多对多添加
    12 #     方式一 找到要把做作者加入书籍的书籍对象,然后在找到对应作者的主键(也就是找model对象),因为authors也是属性,
    13 #     通过 book.authors.add把作者加入
    14 #     book=Book.objects.filter(title="css").first()
    15     # alex=Author.objects.filter(name="alex").first()
    16     # egon=Author.objects.filter(name="egon").first()
    17     # 方式二 找到要把做作者加入书籍的书籍对象,然后通过book.authors.add() 加入对应的作者的主键数字
    18     # book.authors.add(1,2)
    19     # 方式三 当你取到的是一串列表的时候,需要一个个去,这里可以应用打散
    20     # book.authors.add(*[1, 2])
    21 
    22 
    23 
    24 
    25 
    26 ############查询
    27     # 一对多
    28     # 查询主键为1的书籍的出版社所在的城市
    29     # 正向查询 找到主键为一的对象 再通过对象的属性publish 找出
    30     # book_obj=Book.objects.filter(nid=1).first()
    31     # book_obj是主键为1的书籍对象关联的出版社对象
    32     # print(book_obj.publish.email)
    33     # 找到云南出版社出版的书
    34     # 反向查询
    35     # publish_obj=Publish.objects.filter(name="云南出版社")
    36     # print(publish_obj.book_set.all())
    37 
    38     # 多对多
    39     # 正向查询
    40     # book=Book.objects.filter(title="python").first()
    41     # ret=book.authors.all().values("age")
    42     # print(ret)
    43     # 反向查询
    44     # alex=Author.objects.filter(name="alex").first()
    45     # print(alex.book_set.all())
    46 
    47     # 一对一  找对象 没有反向
    48     # alex=Author.objects.filter(name="egon").first()
    49     # print(alex.ad.addr)
    50 
    51     # ad=AuthorDetail.objects.filter(tel=123).first()
    52     # print(ad.author.name)
    53 
    54     # 
    55     # return  HttpResponse("OK")
    创建,查询
  • 相关阅读:
    Mysql: 一个死锁场景的解决
    Mysql: 创建新的账号
    安全评测:BashDoor
    BeanFactory和FactoryBean的区别:
    linux 下将war解压到当前目录
    学习BoolanC++笔记_01(C++面向对象高级编程(上)第一周)
    学习BoolanC++笔记_00(预备)
    Linux (Centos) 上安装Nexus OSS 3 并搭建docker私有仓库
    linux(Centos7)搭建rpm仓库
    树莓派4b安装 manjaro linux
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/9852636.html
Copyright © 2020-2023  润新知