這段時間用django 作程序用到了一對多的關係的操做,下面分享一些心得體會,但願對你們有幫助。 我先定義兩個模型,一個是做者,一個是做者出版的書籍,算是一對多的類型。 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('出版時間') 若是咱們要查詢一個做者出版了哪些書籍的話,那咱們要怎麼作呢? 先查詢到做者的信息 person = Person.objects.fiter(你的條件) 返回一個person對象 接下來就查詢person關聯的全部書籍對象 book = person.book_set.all() django 默認每一個主表的對象都有一個是外鍵的屬性,能夠經過它來查詢到全部屬於主表的子表的信息。 這個屬性的名稱默認是以子表的名稱小寫加上_set()來表示,默認返回的是一個querydict對象,你能夠繼續的根據狀況來查詢等操做。 若是你以爲上面的定義比較麻煩的話,你也能夠在定義主表的外鍵的時候,給這個外鍵定義好一個名稱。要用related_name好比: person = models.ForeignKey(Person, related_name='person_set') 那麼上面的話:book = person.book_set.all() 也能夠用book = person.person_set.all() 上面的是查詢是經過主表來查詢子表的信。 下面我簡單的說下經過子表來查詢主表的信息。 假設我要查詢一本書籍所關聯的做者的信息,那我能夠經過下面的步驟來實現: 假如我先獲得了一個子表的對象。那我只要獲取該對象關聯主表的外鍵的熟悉,就能夠獲得主表的信息了。 好比我獲得一個book對象,而後我想獲得book對象的主表person的信息的話: p = book.person 我我的感受person有點像指針,存儲着person主表對象的地址,呵呵!不過python沒有指針這個概念,這是我覺的更好理解。