這段時(shí)間用django 做程序用到了一對(duì)多的關(guān)系的操作,下面分享一些心得體會(huì),希望對(duì)大家有幫助。
我先定義兩個(gè)模型,一個(gè)是作者,一個(gè)是作者出版的書籍,算是一對(duì)多的類型。
class Person(models.Model);
name = models.CharField('作者姓名', max_length=10)
age = models.IntegerField('作者年齡')
class Book(models.Model):
person = models.ForeignKey(Person, related_name='person_book')
title = models.CharField('書籍名稱', max_length=10)
pubtime = models.DateField('出版時(shí)間')
如果我們要查詢一個(gè)作者出版了哪些書籍的話,那我們要怎么做呢?
先查詢到作者的信息
person = Person.objects.fiter(你的條件)
返回一個(gè)person對(duì)象
接下來就查詢person關(guān)聯(lián)的所有書籍對(duì)象
book = person.book_set.all()
django 默認(rèn)每個(gè)主表的對(duì)象都有一個(gè)是外鍵的屬性,可以通過它來查詢到所有屬于主表的子表的信息。
這個(gè)屬性的名稱默認(rèn)是以子表的名稱小寫加上_set()來表示,默認(rèn)返回的是一個(gè)querydict對(duì)象,你可以繼續(xù)的根據(jù)情況來查詢等操作。
如果你覺得上面的定義比較麻煩的話,你也可以在定義主表的外鍵的時(shí)候,給這個(gè)外鍵定義好一個(gè)名稱。要用related_name比如:
person = models.ForeignKey(Person, related_name='person_set')
那么上面的話:book = person.book_set.all()
也可以用book = person.person_set.all()
上面的是查詢是通過主表來查詢子表的信。
下面我簡(jiǎn)單的說下通過子表來查詢主表的信息。
假設(shè)我要查詢一本書籍所關(guān)聯(lián)的作者的信息,那我可以通過下面的步驟來實(shí)現(xiàn):
假如我先得到了一個(gè)子表的對(duì)象。那我只要獲取該對(duì)象關(guān)聯(lián)主表的外鍵的熟悉,就可以得到主表的信息了。
比如我得到一個(gè)book對(duì)象,然后我想得到book對(duì)象的主表person的信息的話:
p = book.person
我個(gè)人感覺person有點(diǎn)像指針,存儲(chǔ)著person主表對(duì)象的地址,呵呵!不過python沒有指針這個(gè)概念,這是我覺的更好理解。
這篇文章涉及到的django相關(guān)的文章,感興趣的可以看看:
提高django model效率的幾個(gè)小方法,
老王python:django model的get和filter方法的區(qū)別 今天就說到這吧,希望能夠?qū)Υ蠹依斫鈊jango 一對(duì)多關(guān)系操作有幫助,我先閃了,如果覺的說的不好,或者有意見的話,可以到下面留言吧,大家一起相互交流,歡迎拍磚!如果你對(duì)django 感興趣的話,可以看看
django教程