我有3个型号:
class book(models.Model):
id = models.AutoField(primary_key=True)
publisher= models.ForeignKey(Publisher, related_name='publisher')
def __str__(self):
return str(self.publisher)
def __repr__(self):
return str(self.publisher.id)
class reader(models.Model):
publisher= models.ForeignKey(Publisher)
class publisher(models.Model):
date = models.DateTimeField()
我正在努力让所有阅读特定书籍的读者,我在读者和书本之间没有联系, 只有通过发布商表,我试图获取此信息:Book.object.select_related(publisher__readers__id ='x') 但是我收到了错误。 可以从我的模型中获取多个表中的信息吗? 感谢
答案 0 :(得分:2)
我感觉你的代码有点奇怪,如果你遵循Django良好实践,related_name
参数和你想做什么的感觉,它应该是这样的:
class Book(models.Model):
publisher = models.ForeignKey(Publisher, related_name='books')
class Reader(models.Model):
publisher = models.ForeignKey(Publisher, related_name='readers')
class Publisher(models.Model):
date = models.DateTimeField()
然后你有:
book = Book.objects.get(pk='<book_pk>')
readers = book.publisher.readers.all()
# or just
readers = Reader.objects.filter(publisher__books__pk='<book_pk>')
您的关系看起来很奇怪,因为您要在Reader
和Publisher
之间创建关系,而不是使用Book
本身。您应该在ManyToMany
和Reader
之间创建一个Book
关系,通过这样做您可以获得以下情况:&#34;读者阅读书籍,多个读者可以阅读相同内容本书&#34 ;.今天,你的代码意味着:&#34;阅读与出版商有关,这意味着这本阅读器阅读了所有的出版商书籍,对此我没有看到很多意义,抱歉。