通过连接获取所有字段。 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】:使用values
或values_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的主要内容,如果未能解决你的问题,请参考以下文章