Django中related_name做用

至關於咱們使用related代替了在經過一個對象查詢出多個對象集合時,使用表名_set來獲取django

我先定義兩個模型,一個是做者,一個是做者出版的書籍,算是一對多的類型。

class Person(models.Model);
    name = models.CharField(verbose_name='做者姓名', max_length=10)
    age = models.IntegerField(verbose_name='做者年齡')


class Book(models.Model):
    person = models.ForeignKey(Person, related_name='person_book')
    title = models.CharField(verbose_name='書籍名稱', max_length=10)
    pubtime = models.DateField(verbose_name='出版時間')


若是咱們要查詢一個做者出版了哪些書籍的話,那咱們要怎麼作呢?
即經過一查詢出多的那方面

先查詢到做者的信息
person = Person.objects.fiter(你的條件)
返回一個person對象

接下來就查詢person關聯的全部書籍對象,咱們在前面講過的使用基於對象的查詢方式,反向查詢按照表名
book = person.book_set.all()
django 默認每一個主表的對象都有一個是外鍵的屬性,能夠經過它來查詢到全部屬於主表的子表的信息。
這個屬性的名稱默認是以子表的名稱小寫加上_set()來表示,默認返回的是一個querydict對象,你能夠繼續的根據狀況來查詢等操做。

在實際項目中,咱們使用最多的仍是related_name
若是你以爲上面的定義比較麻煩的話,你也能夠在定義主表的外鍵的時候,給這個外鍵定義好一個名稱。要用related_name好比在Book表中:
  person = models.ForeignKey(Person, related_name='person_books')
那麼實現上面的需求,能夠使用person.book_set.all()
也能夠使用person.person_books.all()
相關文章
相關標籤/搜索