15DjangoORM一對多模型類的建立以及資料的建立和查詢
阿新 • • 發佈:2021-12-01
一對多模型類的建立:
class Publisher(models.Model): #出版社[一] name = models.CharField('出版社名稱',max_length=50) class Book(models.Model): #書【多】 title = models.CharField("書名",max_length=50,default='',unique=True) publisher = models.ForeignKey(Publisher,on_delete=models.CASCAD,null=True)
一對多資料的建立和查詢:
反向查詢有一個方法:小寫類名_set(此方法可以獲取一個objects物件)
(venv) D:\PycharmProjects\mysite3>python manage.py shell >>> from bookstore.models import * >>> p1 = Publisher.objects.create(name="中信出版社") #新增兩本中信出版社的書 ^ >>> b1 = Book.objects.create(title="FastAPI",publisher=p1) >>> b2 = Book.objects.create(title="Flask",publisher_id=p1.id) #正向查詢 >>> b1.publisher.name '中信出版社' #反向查詢: >>> p1.book_set.all() <QuerySet [<Book: FastAPI__0.00_0.00>, <Book: Flask__0.00_0.00>]>
多對多模型的建立和資料的建立:
多對多關係:
mysql中建立多對多需要依賴第三張表來實現,但在django中無需手動建立第三張表,Django系統自動幫我們完成!
語法:在關聯的兩個類中的任意一個類中增加:
屬性 = models.ManyToManyField(MyModel)
1多對多-模型建立:
class Author(models.Model): name = models.CharField('姓名',max_length=11,default='') class Book(models.Model): title = models.CharField("書名",max_length=50,default='',unique=True) authors = models.ManyToManyField(Author)
2多對多-資料建立
#方法1: 先建立兩作者,然後利用反向屬性_set去操作和自己關聯的表 author1 = Author.objects.create(name='呂老師') author2 = Author.objects.create(name='王老師') #呂老師和王老師同時寫了一本書 book11 = author1.book_set.create(title='centos8') #建立本書同時和呂老師繫結 author2.book_set.add(book11)#已經有了一個本了,給書新增作者的方法 #方法2 book = Book.objects.create(name='centos8') #先建立一本書 #呂老師和王老師同時寫了一本書 author3 = book.authors.create(name='王老師') #然後為數建立作者 book.authors.add(author1) #給書增加作者
練習:
(venv) D:\PycharmProjects\mysite3>python manage.py shell >>> from bookstore.models import * #建立第一個作者 >>> a1 = Author.objects.create(name='guolaoshi') #建立一本書並繫結作者 >>> b1 = a1.book_set.create(title='centos8') >>> #建立第二個作者 >>> a2 = Author.objects.create(name='wanglaoshi') #把作者和已存在的書關聯 >>> a2.book_set.add(b1) >>>
3多對多-資料查詢
#多對多查詢測試: def more_to_more_select_db(request): #from bookstore.models import * author_list=[] book_obj = Book.objects.get(title='centos8') author_obj=book_obj.authors.all().values("name") for ath in author_obj: author_list.append(ath) return HttpResponse("查詢結果:%s"%author_list)