通过连接获取所有字段。 DJANGO

Posted

技术标签:

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

如果我这样做了

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

我只得到Book 的字段

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

【问题讨论】:

你可以使用annotate 【参考方案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 的性能要好得多,我会坚持下去。

以上是关于通过连接获取所有字段。 DJANGO的主要内容,如果未能解决你的问题,请参考以下文章

Django 连接数据库,数据库表字段的增删改查

如何使用附加过滤的相关对象作为 Django 中的字段来获取结果?

Ajax 调用以通过单击按钮返回填充表单字段 django

django模型,如何动态设置查询的字段?

model字段对象和forms字段对象的区别和联系

如何通过JDBC连接Oracle数据库获取表名列表