从对象列表中接收相关模型的列表(由外键绑定)。 Django的

时间:2019-02-13 13:27:28

标签: django tags django-queryset

我有两个非常简单的产品和照片课程。我想在商店的主页上展示产品以及与外键有关的照片。但是我不知道该怎么做,我找到了很多答案,可以使用诸如“ prefetch_related”之类的联接在视图中实现此目的,但是我的ID会根据情况而改变。那么,您如何展示每种产品的照片?有我不知道的Django标记吗?

我的模型。py

class Product(models.Model)
    name = models.CharField(max_length=10)

class Image(models.Model)
    image = models.ImageField()
    name_related = models.ForeignKay(Product, on_delate=models.CASCADE)

views.py

def home(request):
    product_list = Product.objects.all()[:12]
    #img = ??
    context = {'product_list': product_list,
               }
    return render(request, 'home.html', context)

home.html

{% for product in product_list %}
{{ product.name }}
<!-- {{ product.imge }} ' element presenting the first photo for each 'product' model'???-->
{% endfor %}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

就做

{% for product in product_list %}
    {{ product.name }}
    {% for image in product.image.all %} 
        <!-- {{ image.image.url }} -->?
    {% endfor %}
{% endfor %}

答案 1 :(得分:1)

既然已经建立了外部关系,您就可以从父模型中遍历相关模型。

相关模型已经可以从父模型访问,而无需做任何明确的事情。

您可以在模板中执行以下操作:

{% for product in product_list %}
    {{ product.name }}
    {% for product_image in product.image.all %}
        <!-- Iterate through this products related images -->
        {{ product_image.image.url }}
    {% endfor %}
{% endfor %}

出于性能方面的考虑,您将需要预取关系,否则将对每个产品进行附加查询,因此,在您看来,您需要添加以下内容:

product_list = Product.objects.all().prefetch_related('image')[:12]