我有这些模特:
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>
如何通过入门书获得每本书的人名?
答案 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
一样)并未正确描述关系