Django: как загрузить Queryset с определенным полем внешнего ключа?
У меня есть 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
каждой строки с соответствующим именем художника с помощью F expressions
следующим образом:
from django.db.models import F
paintings = Painting.objects.annotate(painter_name=F('painter__name')).all()
Каждый экземпляр картины в списке картин будет иметь атрибут painter_name
, основанный на поле имени связанного художника.