2013-04-20 57 views
-1

我遇到了一个小问题来跟从我的Django视图拉出的产品列表中拔出产品只有一次。我有一个产品页面,可以浏览我的模型中的所有产品,其中勾选了“活动”复选框。您也可以将副产品分配给这些产品。从Django视图

如果产品有分配给它的子产品,而不是加载页面,更多的内容会加载一个页面的子产品的列表。然而,目前在模板中,它循环并抽出所有产品。然而,目前如果产品有一个或多个分配给它的子产品,它将不止一次地通过每个产品,这取决于它分配给它的子产品的数量。

这样做的原因是因为我已经创建了在视图功能结合了两个变量共同链。但我需要这样做才能使子产品正常工作。

所以基本上我需要做的是限制每个产品只在模板上出现一次,不管它分多少产品分配给它。

如果您需要更多信息,请询问! :)

*使用答案* 更新的视图

VIEW:

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 %} 

ANSWER

原来我并不需要链接查询集,只需将产品一起拉出即可。因为还有另一个功能在做其他工作。抱歉的困惑,但谢谢。我已经更新了答案。

+2

我不明白你为什么要串联查询集,也不是问题,你正在试图解决,你可以更多地讨论的主题,并与相关的代码扩展您的片断。顺便说一句,你应该实现一个[经理](https://docs.djangoproject.com/en/dev/topics/db/managers/)来处理产品层次结构。 – 2013-04-20 10:48:48

+0

也许''独特'方法是你在找什么? https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct – 2013-04-20 13:12:44

+0

只是为了记录:你会得到非常相同的产品序列,只是用'产品_ = Products.objects.filter(激活=真).order_by( “ - 序”)'。如果你不明白为什么那么该学习编程和关系模型。 – 2013-04-22 08:20:47

回答

1

ANSWER

原来我并不需要链中的查询集我可以拉出产品一起使用。因为还有另一个功能在做其他工作。抱歉的困惑,但谢谢。我已经更新了答案。