Django查询多对一关系,如何检索数据多对一关系

时间:2020-09-09 21:54:54

标签: django django-models django-forms django-views django-templates

如何多对一关系检索数据。

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

1 个答案:

答案 0 :(得分:0)

qsAds 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