如何多对一关系检索数据。
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 %}
答案 0 :(得分:0)
qs
是Ads
的 set ,因此您不能在 queryset 上访问qs.aimage_set
,而只能在{{ 1}}模型。此外,您还指定了related_name=…
parameter [Django-doc],Ads
的值,因此,它是用来反向访问对象的管理器的名称:
related_name='ads_image'
这将导致一个 N + 1 问题。您可以使用.prefetch_related(…)
[Django-doc]在批量中获取相关的{% for ad in qs %}
<b>{{ o.title }}</b>
{% for o in ad.ads_image.all %}
{{ o.image.url }}
{% endfor %}
{% endfor %}
对象:
Aimage