Django стремится загрузить отношения один ко многим - PullRequest
0 голосов
/ 25 марта 2019

Простой вопрос, я искал и не могу понять это ...

Как настроить загрузку в django?

class Album(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=255)
    description = models.CharField(max_length=255, blank=True)


class Photo(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    photo = models.ImageField(upload_to='photos/%Y/%m/%d/')


albums = Album.objects.filter(user=request.user).all()    
for album in albums:
    photos = album.photo_set.all()
    for photo in photos:
        print(photo.name)
        print(photo.photo)

Теперь я хочу получить всеальбомы и все фотографии, с одного звонка в БД.albums = Album.objects.filter(user=request.user).all()

Я смотрел на select_related () и prefetch_related () , но это выглядит наоборот (получение объекта альбома в то же времяв качестве фотообъекта, при запросе к фотообъекту)

1 Ответ

2 голосов
/ 25 марта 2019

Хорошо, ключ здесь был albums = Album.objects.filter(user=request.user).prefetch_related('photo_set')

, в частности, prefetch_related('FOO_set'), где 'FOO' - это имя связанного объекта

https://docs.djangoproject.com/en/2.1/topics/db/queries/#following-relationships-backward

...