我在从 Django 视图中提取产品列表时遇到了一个小问题。我有一个产品页面,它可以浏览我模型中的所有产品,其中勾选了“活动”复选框。您还可以将子产品分配给这些产品。
如果产品有分配给它的子产品,而不是加载具有更多内容的页面,它将加载具有子产品列表的页面。然而,目前在模板中它会循环并拉出所有产品。但是,目前如果一个产品有 1 个或多个子产品分配给它,它将多次拉动每个产品,具体取决于它分配给它的子产品的数量。
这样做的原因是因为我创建了一个链,它将视图中的函数中的两个变量组合在一起。但我需要这样做才能使子产品工作。
所以基本上我需要做的是限制每个产品在模板上只出现一次,无论它分配了多少子产品。
如果您需要更多信息,请询问!:)
*更新后的视图和答案 *
看法:
def producthome(request):
#prod_info= Product.objects.filter(active=True, sub_product__isnull = True)
#sub_product = Product.objects.filter(sub_product__isnull = False, active=True)
partner_post= Partner.objects.all()
product_all = Product.objects.filter(active=true)
#product_all = list(chain(prod_info, sub_product))
"""
Didn't need to chain the querysets together
product_all = sorted(
chain(prod_info, sub_product),
key = attrgetter('order'), reverse=True)
"""
return render_to_response('product_multi.html',{
'product_all': product_all,
'sub_product': sub_product,
'prod_info': prod_info,
'partner_post': partner_post
}, context_instance=RequestContext(request))
模板:
{% for product in product_all %}
<li>
<div>
<h2 class="posttitle colortext">{{ product.name }}</h2>
<p>{{ product.description|safe|truncatewords:13 }}...</p>
<a href="{{ product.get_absolute_url }}" class="button">More</a>
</div>
</li>
{% endfor %}
回答
事实证明,我不需要链接查询集,我可以将产品拉到一起。因为有另一个功能在做其他工作。为混乱道歉,但谢谢。我已经更新了答案。