2012-02-13 50 views
0

如果我們有一個查詢集說是否進一步查詢集的操作改變原有的查詢集

eventset=Event.objects.filter(eventdate=date) 

後來,如果我這樣做與查詢集的對象,那會是正確的邏輯或將EventSet這樣被操縱?

for event in eventset.order_by('-likes'): 
    if event.venue in venuerankings: 
     venuerankings.append[event.venue] 

以上部分代碼是否改變'eventset'中對象的順序?

代碼的相關部分。

totalvenues=len(Venues.objects.all())) 
    events=[[''] * totalvenues for row in range(24)] 
eventset=Event.objects.filter(eventdate=date) 
venuerankings=[] 
for event in eventset.order_by('-likes'): 
    if event.venue in venuerankings: 
     venuerankings.append[event.venue] 
for venueno,venue in enumerate(venuerankings): 
    for event in eventset.filter[venue=venue]: 
     events[event.time][venueno]=event 
+0

這是爲什麼降低投票率? – 2012-02-13 11:03:52

+0

我沒有低估這個,但是你的語法沒有錯嗎?我認爲你的意思是'venueranking.append(event.venue)'。另外,你想在這裏做什麼?你想要什麼'事件'是什麼?輸入和輸出的例子將非常有用。 – cha0site 2012-02-13 11:09:17

+1

不知道爲什麼這是downvoted,似乎是一個合理的問題給我。我的理解是事件集可以像這樣改變eventset = eventset.order_by(' - likes'),但只是像使用它一樣使用它不會影響它。 – PhoebeB 2012-02-13 11:13:37

回答

1

您的代碼不會影響原始查詢集,因爲查詢集是懶惰的。

這意味着,在循環for event in eventset.order_by('-likes'):你正在做兩件事情:

(1)建立由「-likes」訂購了新的查詢集;和

(2)依次創建由queryset指定的每個對象。

因此,如果再次運行循環,您將收到新的對象,這將不會反映對前一個循環中的對象所做的任何未保存的更改。