【问题标题】:Get all fields with join. DJANGO通过连接获取所有字段。 DJANGO
【发布时间】:2015-11-12 15:25:06
【问题描述】:

如果我这样做了

books = Book.objects.filter(author__name="John")

我只得到Book 的字段

我怎样才能获得Author 的字段,通过单个查询?

【问题讨论】:

  • 你可以使用annotate

标签: python sql django django-queryset django-orm


【解决方案1】:
Books.objects.select_related('author').filter(author__name="John")

你只需要这样做。

这将在一个查询中获取相关对象。

【讨论】:

  • 与图书相关的作者。与作者无关的书。在这种情况下我该怎么办?
  • 我的答案将给出具有 author_name="John" 的 Books 对象。此外,默认情况下将包含作者字段。您正在寻找的具体结果是什么?
【解决方案2】:

使用valuesvalues_list

books_info = Book.objects.filter(author__name="John").values('book_field1', 'book_field2', 'book__author_field1','book__author_field2')

django 文档:

https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values-list

【讨论】:

  • 感谢@Shang Wang。但是我怎样才能选择所有字段。像这样 SELECT *
  • 似乎比select_related 的性能要好得多,我会坚持下去。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 2016-10-26
  • 2018-06-24
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多