首页 > 解决方案 > 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’)

标签: djangodjango-modelsdjango-queryset

解决方案


支持这一点的一种方法是annotate使用相关画家名称的每一行,F expressions如下所示:

from django.db.models import F

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

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


推荐阅读