【问题标题】:Get Related model fields in django template在 django 模板中获取相关模型字段
【发布时间】:2021-04-05 16:12:37
【问题描述】:

我正在尝试获取产品,并且我想要与 Django 模板中的产品相同的图像。

型号

class Product(models.Model):
    title = models.CharField(blank=True,null=False,max_length=100)
    
class ProductImage(models.Model):
    product = models.ForeignKey(to='products.Product', on_delete=models.CASCADE, related_name='images', default=None)
    image = models.ImageField(upload_to='images/product_inmages', null=False, blank=False)
    def __str__(self):
        return self.product.title

【问题讨论】:

    标签: python django model


    【解决方案1】:

    如果您将Products 中的QuerySet 作为products 传递给模板,您可以使用:

    {% for product in products %}
        {% for image in product.images.all %}
            <img src="{{ image.image.url }}">
        {% endfor %}
    {% endfor %}

    您可以通过在模板中批量加载所有相关的ProductImages 来提高效率:

    from django.shortcuts import render
    
    def my_view(request):
        products = Product.objects.prefetch_related('images')
        return render(request, 'name-of-some-template.html', {'products': products})

    【讨论】:

    • 我已经实现了相同但得到错误异常类型:AttributeError 异常值:在产品对象上找不到“productimage_set”,“productimage_set”是 prefetch_related() 的无效参数
    • @NamanMalik:您是否在ForeignKey 上指定了related_name=''..."?
    • 是类 ProductImage(models.Model): product = models.ForeignKey(to='products.Product', on_delete=models.CASCADE, default=None, related_name='images') image = models .ImageField(upload_to='images/product_images', null=False, blank=False) def __str__(self): return self.product.title
    • @NamanMalik:那么它是images,而不是productimage_set。请下次让您的最小工作示例可重现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2015-02-18
    • 2020-07-07
    • 2012-05-21
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多