2012-01-03 35 views
1

在Django中,你可以從一個QuerySet做這個刪除的項目,如記錄here如何從草堆SearchQuerySet刪除項目

queryset = QuerySet.remove(item) 

草堆SearchQuerySet是建立在查詢集,但似乎remove方法沒有得到執行。有誰知道一種方法來刪除SearchQuerySet中的項目?

FWIW我正在嘗試爲客戶端進行第二級過濾。基本上,我正在通過SearchQuerySet來討論幾個特定的​​屬性。這個想法是,如果他們沒有它,我想刪除它們。

謝謝

+0

這對於Haystack的錯誤報告會更好。如果他們未能實現自定義的QuerySet,使其仍然像標準的QuerySet一樣工作,那就是一個錯誤,他們應該修復它。 – 2012-01-03 19:21:24

+0

我不認爲這是一個錯誤。也許是一個增強,但我問,因爲我確定有人遇到了這個。這就是說我會提交一個增強請求。 – rh0dium 2012-01-03 19:32:20

+0

語義,實際上,但如果您要取代默認功能,您的覆蓋應該支持所有相同的行爲。這使它成爲一個錯誤。無論如何,如果沒有'remove',就無法從查詢集中刪除單個項目,因此使用Haystack提交某種錯誤/功能請求是解決方案。如果將查詢集轉換爲列表,則可以使用'list.remove',但是這樣會失去查詢集功能。 – 2012-01-03 19:38:18

回答

3

您是否嘗試過使用exclude?即

searchqueryset = searchqueryset.exclude(id=u'myapp.mymodel.%s' % item.pk) 
+0

我會給你信貸,因爲這是我最終做的。 (就在你發佈前) – rh0dium 2012-02-10 18:55:49

2

我看到這個解決方案的一個問題是,如果searchqueryset搜索不同的模型。然後,您將排除所有對象pk = item.pk,這是你不想做的。

以下是我使用的方法。我轉化searchqueryset到一個列表:

searchqueryset_list = list(searchqueryset) 

然後,我可以刪除該項:

searchqueryset_list.remove(item) 

雖然* searchqueryset_list *是不是一個SearchQuerySet對象,我可以在呈現模板使用html頁面。