Django:如何使用外键的特定字段加载查询集?

Django: how to load a Queryset with a specific field of a foreign key?

我有 2 个模型,PaintingPainter

 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 each row with the related painter name using F expressions 像这样:

from django.db.models import F

paintings = Painting.objects.annotate(painter_name=F('painter__name')).all()

绘画列表中的每个绘画实例都有一个基于相关画家姓名字段的 painter_name 属性。