django - Django:如何使用外键的特定字段加载查询集?
问题描述
我有 2 个模型,Painting
并且Painter
.
class Painting(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
painter = models.ForeignKey(Painter)
class Painter(models.Model):
name = models.CharField(max_length=200)
code = models.CharField(max_length=200)
实际上,Painting
有 30 列,Painter
有 3 个。
怎样才能得到一QuerySet
幅画,而不是每个物体都有一painter_id
幅画painter_name
?
我尝试了许多变体:
paintings = Painting.objects.prefetch_related('painter_set__name').all()
但似乎无法正确处理。
我的最终目标是用于pandas
导出 CSV,因此我希望其中的每个对象QuerySet
都包含我感兴趣的所有字段。
我想做类似的事情
paintings = Painting.objects....
df = pandas.DataFrame(list(paintings.values()))
df.to_csv('blah.csv’)
解决方案
支持这一点的一种方法是annotate
使用相关画家名称的每一行,F expressions
如下所示:
from django.db.models import F
paintings = Painting.objects.annotate(painter_name=F('painter__name')).all()
绘画列表中的每个绘画实例都将具有painter_name
基于相关画家名称字段的属性。
推荐阅读
- hyperledger-fabric - 当我想实例化我的链码时出错
- sql - 如何正确创建相互引用的表?
- python - 如何编写一个Ceaser Cipher Python
- django - 如果没有定义 self.kwargs 来自哪里的问题?特别是在 django 代码库中的 SingleObjectMixin 类中
- python-3.x - statsmodels.api 和 scipy.stats 没有产生合适的拟合
- c# - 如何反序列化对对象列表的 JSON 响应
- java - 在 Java 中使用 Selenium 单击动态下拉 div
- reactjs - REACT 16 中的 React 组件中的错误处理
- android - 如何更改 ViewPager 中特定页面的 textView 的文本?
- python - 如何分配变量以从数组中选择?