Django:如何用外键的特定字段加载Queryset ?



我有两个型号,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使用F expressions这样的:

from django.db.models import F
paintings = Painting.objects.annotate(painter_name=F('painter__name')).all()

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

最新更新