【问题标题】:Receiving a list of related models from the list of objects (bound by a foreign key). Django从对象列表中接收相关模型的列表(由外键绑定)。姜戈
【发布时间】:2019-02-13 13:27:28
【问题描述】:

我有两个非常简单的产品和照片类。我想在我的商店主页上展示产品以及与外键相关的照片。但我不知道该怎么做,我找到了很多答案来使用像“prefetch_related”这样的连接在视图中得到这个,但我的 ID 会因每种情况而变化。那么,您如何展示每种产品的照片呢?有没有我不知道的 Django 标签?

我的models.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 %}

任何帮助将不胜感激。

【问题讨论】:

    标签: django tags django-queryset


    【解决方案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]
    

    【讨论】:

      【解决方案2】:

      做吧

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

      【讨论】:

        猜你喜欢
        • 2017-02-08
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 2015-05-24
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多