0

我有这些模型:

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 获取每本书的人名?

4

2 回答 2

2

对于您的模型,每个模型都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)没有正确描述这种关系

于 2013-11-02T11:16:03.060 回答
2

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

for b in books: 
    print b.entry_book.all()[0].person.name
于 2013-11-02T11:13:38.360 回答