2013-04-20 61 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

原來我並不需要鏈中的查詢集我可以拉出產品一起使用。因爲還有另一個功能在做其他工作。抱歉的困惑,但謝謝。我已經更新了答案。