2013-11-02 37 views
0

我有這些模型:Django的 - relatedmanager問題 - 如何訪問第三種模式有關

class Book(models.Model): 
    title = models.TextField() 

class Person(models.Model): 
    name = models.TextField() 

class EntryBook(models.Model): 
    person = models.ForeignKey(Person) 
    book = models.ForeignKey(Book,related_name="entry_book") 

我已經在我手裏了所有的書。我想知道分別輸入這些書籍的人的姓名。

books = Book.objects.all() 
for b in books: 
    print b.entry_book.person.name 

但我得到:

'RelatedManager' object has no attribute 'entry_book' 

如果我print b.entry_book,我得到這個:

<django.db.models.fields.related.RelatedManager object at 0x10d1e8610> 

我怎樣才能得到的每本書直通EntryBook的人的名字嗎?

+0

如果你打印b,你會得到什麼? – iMom0

+0

@ iMom0如果我「打印b」,我會得到每本書的標題。 (有本書的unicode函數,我忘記了這篇文章) – doniyor

回答

1

隨着你的模型,每個Book可以有多個EntryBooks所以你需要考慮到這一點,通過使用第二for循環:

for b in Book.objects.all(): 
    for be in b.entrybook_set.all(): 
     print be.person.name 

你可以看到我使用b.entrybook_set.all()稱爲b.entry_book.all()(與related_name一樣)沒有正確描述關係

1

問題是你想要訪問RelatedManager而不是對象。
嘗試:

for b in books: 
    print b.entry_book.all()[0].person.name 
+0

''list index out of range'' – doniyor