django - relatedmanager问题 - 如何访问关系中的第三个模型

时间:2013-11-02 10:40:31

标签: django django-models

我有这些模特:

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>

如何通过入门书获得每本书的人名?

2 个答案:

答案 0 :(得分:1)

问题是您正在尝试访问RelatedManager而不是对象。
尝试:

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

答案 1 :(得分: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一样)并未正确描述关系