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, основанный на поле имени связанного художника.

Вернуться на верх