0

我有 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') 但我正在出错。可以从我的模型等多个表中获取信息吗?谢谢

4

1 回答 1

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您的关系看起来很奇怪,因为您正在创建 the和 the之间的关系Publisher,而不是使用它Book本身。您应该在和之间创建一个ManyToMany关系,通过这样做,您会遇到这样的情况:“一个读者阅读书籍,并且多个读者可以阅读同一本书。”。今天你的代码意味着类似:“阅读与出版商有关,这意味着这个读者阅读了所有出版商的书籍”,对不起,我没有看到很多意义。ReaderBook

于 2018-06-07T13:58:05.007 回答