如何检索数据多对一关系。
class Ads(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=75)
class Aimage(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
ads = models.ForeignKey(Ads, on_delete=models.CASCADE, related_name='ads_image')
image = models.ImageField(blank=True)
我的观点:
qs = Ads.objects.all()
模板:
{% for o in qs.aimage_set.all %}
{{ o.title }}
{{ o.image.url }} #does work
{% endfor %}
qs
是Ads
的集合,因此您不能在查询集上访问qs.aimage_set
,而是在Ads
模型上访问。此外,您为related_name=…
参数[Django-doc]、related_name='ads_image'
指定了值,因此这是反向访问对象的管理器的名称:
{% for ad in qs %}
<b>{{ o.title }}</b>
{% for o inad.ads_image.all %}
{{ o.image.url }}
{% endfor %}
{% endfor %}
这将导致N+1问题。您可以使用.prefetch_related(…)
[Django-doc]在bulk:中获取相关的Aimage
对象
qs = Ads.objects.prefetch_related('ads_image')