我有两个型号,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
属性。