如何获取相关对象

时间:2019-09-12 18:42:51

标签: django

我有2个型号: 产品 -审查

每个产品都有一个或多个评论。

问题:如何查看相关对象并将其传递到模板中。

def product_detail(request, id, slug):
    product = get_object_or_404(Product, id=id, slug=slug, available=True)
    cart_product_form = CartAddProductForm()
    reviews = Review.objects.filter()
    template = 'shop/product/detail.html'
    return render_to_response(template,
                              {'product': product,
                               'cart_product_form': cart_product_form,
                               'reviews': reviews})
class Review(models.Model):
    RATING_CHOICES = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
        (5, '5'),
    )
    product = models.ForeignKey(Product, on_delete=models.CASCADE, default=None)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    created = models.DateTimeField(auto_now_add=True, auto_now=False)
    text = models.TextField(max_length=500, blank=False)
    rating = models.IntegerField(choices=RATING_CHOICES, default=5)

    def __str__(self):
        return "%s" % self.user

2 个答案:

答案 0 :(得分:1)

  

我如何查看此相关对象并将其传递到模板中。

您不需要在模板中传递它们。在模板中,您可以将它们呈现为:

{% for review in product.review_set.all %}
    {{ review.text }}
{% endfor %}

如果要呈现一组相关的多个项,最好使用.prefetch_related(..) [Django-doc]调用在单个查询中预取所有相关对象。

答案 1 :(得分:0)

您可以过滤并传递“审阅”对象中您要获取的产品:

  Review.objects.filter(product__id=productid)

这将检索该产品的所有评论,您可以通过某种视图方法获得此评论,并传递到具有上下文的模板

https://docs.djangoproject.com/en/2.2/ref/templates/api/#using-requestcontext https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-display/