小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

django 一對(duì)多關(guān)系操作

 天才白癡書館 2015-04-13

django 一對(duì)多關(guān)系操作

這段時(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教程

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多