Django:如何使用外键的特定字段加载查询集?
Django: how to load a Queryset with a specific field of a foreign key?
我有 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
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
属性。
我有 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
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
属性。