1. 程式人生 > 其它 >15DjangoORM一對多模型類的建立以及資料的建立和查詢

15DjangoORM一對多模型類的建立以及資料的建立和查詢

一對多模型類的建立:

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)