因此QuerySet
s是「懶惰」,只能在某些情況下運行(repr,list等)。我創建了一個自定義QuerySet
做許多查詢,但這些可能會有數百萬個項目! 這是比我想返回更多的方式。Django自定義QuerySet評估
當返回評估QuerySet
時,它不應該有超過25個結果!現在我知道我可以做到以下幾點:
first = example.objects.filter(...)
last = first.filter(...)
result = last[:25]
#do stuff with result
,但我會用example
對象,我覺得沒有必要也行result = last[:25]
做這麼多的疑問。 有沒有辦法指定QuerySet
返回的方式?
如果有,我怎樣才能改變它,以便每當QuerySet
將評估它只返回在QuerySet
第一x
項目,其中,在這種情況下,x = 25
重要提示:
切片必須在評估,因爲這樣我可以鏈接查詢沒有有限的結果,但是當我評估時返回結果,它將有一個最大值x
這是額外的代碼行,我知道我可以使用'x',我只是覺得它沒有必要,因爲它會被調用很多次,比如數千次,而且我無法爲每個自定義過濾器執行它,因爲切片會評估它然後你將無法鏈接 –
文檔說:「通常,切片QuerySet返回一個新的QuerySet - 它不評估查詢。」所以我會說你的答案是要走的路。 – XORcist
@möter「一般情況下」,有時會出現這樣的情況,時間非常重要,我不能冒險評估。此外,這是一個API,它會破壞API –