为什么我无法在 DJANGO 中获取预取的相关对象?

Why i cant get the prefetched related object in DJANGO?

我想使用相关的预取为每个 galeria 获取缩略图 = True 的 midia。

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 %}

它returns None。检查数据库中的 sqls 命中,galeria.midias.first 没有出现(预取正在工作并且只返回缩略图 = True 的 midia)。为什么当我使用 galeria.midias 时 returns None?

因为 midias 是一个查询集。不是一个对象。所以你必须遍历它。

{% 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 %}