为什么我无法在 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 %}
我想使用相关的预取为每个 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 %}