select_related多个表

时间:2018-06-07 13:40:33

标签: django python-3.x django-forms django-select-related

我有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') 但是我收到了错误。 可以从我的模型中获取多个表中的信息吗? 感谢

1 个答案:

答案 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>')

您的关系看起来很奇怪,因为您要在ReaderPublisher之间创建关系,而不是使用Book本身。您应该在ManyToManyReader之间创建一个Book关系,通过这样做您可以获得以下情况:&#34;读者阅读书籍,多个读者可以阅读相同内容本书&#34 ;.今天,你的代码意味着:&#34;阅读与出版商有关,这意味着这本阅读器阅读了所有的出版商书籍,对此我没有看到很多意义,抱歉。