Почему я не могу получить префетчированный связанный объект в DJANGO?

Я хочу получить midia с thumbnail = True для каждой галереи, используя prefetch related.

class Midia(Base): 
    galeria = models.ForeignKey(Galeria, on_delete=models.CASCADE, related_name= "midias")        
    thumbnail = models.BooleanField('Thumbnail ', default=False)
    video_thumbnail = models.URLField(blank = True)
    imagem = StdImageField(upload_to='midias/', blank=True, delete_orphans=True)

class Galeria(Base): 
    titulo = models.CharField('Título', max_length=100) 
    descricao = models.TextField('Descrição', blank= True)  

Я сделал это с помощью этого кода в представлении:

 galerias = Galeria.objects.prefetch_related(Prefetch('midias', queryset= Midia.objects.filter(thumbnail = True))).all() 

А это в HTML:

 {% for galeria in galerias %}  
     {% with thumbnail=galeria.midias.first %} 
         {% if thumbnail %}
             {% if thumbnail.imagem %}
                 <img src="{{ thumbnail.imagem.url }}" alt="" > 
             {% else %} 
                 <img src="{{ thumbnail.video_thumbnail }}" alt=""> 
             {% endif %}   
         {% else %} 
              <img src="generic image" alt="" > 
         {% endif %}
      {% endwith %} 

Но почему когда я пытаюсь сделать это:

{% with thumbnail=galeria.midias %}

Возвращает None. При проверке sqls hits в базе данных galeria.midias.first не появляется (prefetch работает и возвращает только midia с thumbnail = True). Почему при использовании galeria.midias возвращается None?

Потому что midias - это queryset. А не объект. Поэтому вы должны выполнить итерацию по нему.

{% for galeria in galerias %}  
 {% for thumbnail in galeria.midias.all %}
     {% if thumbnail %}
         {% if thumbnail.imagem %}
             <img src="{{ thumbnail.imagem.url }}" alt="" > 
         {% else %} 
             <img src="{{ thumbnail.video_thumbnail }}" alt=""> 
         {% endif %}   
     {% else %} 
          <img src="generic image" alt="" > 
     {% endif %}
  {% endfor %}
{% endfor %}
Вернуться на верх