【问题标题】:how to do select_related from multiple table如何从多个表中选择相关
【发布时间】:2018-11-20 07:39:59
【问题描述】:

我有 3 个以这种方式连接的模型:

class book(models.Model):
    id = models.AutoField(primary_key=True)
    publisher= models.ForeignKey(Publisher, related_name='publisher')
class reader(models.Model):
    publisher= models.ForeignKey(Publisher)
class publisher(models.Model):
    date = models.DateTimeField()

我正在努力吸引特定书籍的所有读者。 我试着做:Reader.objects.select_related(publisher__id='some_id') ang 出错了:Unable to get repr for <class 'django.db.models.query.QuerySet'> 我无法更改此模型,有办法使用该模型获取此信息吗? 谢谢。

【问题讨论】:

  • 为什么reader只有published字段,读者应该读一本书,对吧?链接在哪里?
  • 您的建模有些奇怪,您将读者链接到发布者?人们不阅读出版商,他们阅读书籍。
  • 此外related_name,应该是'books',因为相关名称是相反方向的名称:从publisherbook。我真的建议先清理你的建模,因为基本上所有的业务逻辑都依赖于建模。
  • 除了使用“select_related”之外,您在运行服务器时没有收到任何错误吗?我很确定类的顺序定义了您是否可以使用另一个模型作为外键。例如,您不应该在阅读器中使用发布者作为外键。
  • @almostabeginner:事实上他应该可以。但建模简直是“奇怪”。除非这个模型中的读者是出版商雇佣的一些专业校对者,否则读者没有书的钥匙是很奇怪的。

标签: django python-3.x django-models django-queryset django-select-related


【解决方案1】:

我认为你应该像这样使用 filter 而不是 select_related:

publishers = Publisher.objects.filter(book_id=<your_book_id>)

Reader.objects.filter(publisher__in=publishers)

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多