2017-10-11 19 views
0

我只是得不到答案Django無法正常工作。 Django說一切都很好。我想限制從數據庫中獲得的結果。在documentation被說是第一個參數是偏移量,第二個是我得到多少結果開始與偏移+ 1.我在這裏做錯了什麼?限制Django中的QuerySets無法正常工作

當我不限制查詢一切工作正常。所以錯誤應該是通過使用限制。

views.py

def ajax_more(request): 
    categoryid = request.GET.get('categoryid', None) 
    query = request.GET.get('query', None) 
    offset = request.GET.get('offset', None) 

    if query: 
     if categoryid == "6": 
      advertisements = Advertisement.objects.filter(title__contains=query)[int(offset): 2] 
     else: 
      advertisements = Advertisement.objects.filter(category__id=categoryid, title__contains=query)[int(offset): 2] 
    else: 
     if categoryid == "6": 
      advertisements = Advertisement.objects.all()[int(offset): 2] 
     else: 
      advertisements = Advertisement.objects.filter(category__id=categoryid)[int(offset): 2] 


    advertisements_list = [] 
    for advertisement in advertisements: 
     advertisements_list.append({ 
      'id': advertisement.id, 
      'description': advertisement.description, 
      'title': advertisement.title, 
      'picture_url': advertisement.image.url, 
      'date': advertisement.date }) 

    data = { 'advertisements_list': advertisements_list } 
    return JsonResponse(data) 
+0

檢查你的「偏移」值 – Robert

+0

偏移=請求.data.get('offset',0) – Robert

+0

「offset」工作正常。我從阿賈克斯得到它。 – Coder949

回答

4

你誤會了如何在Python切片的作品。 2並不意味着返回兩個項目,這意味着停在第二個項目(0索引),不包括它。如果偏移量爲2或更多,則切片查詢集將爲空。

如果你想包括兩個項目,然後你想:

advertisements = Advertisement.objects.all()[int(offset):int(offset)+2] 
+0

想到這樣的事情,但我不明白它如何正常工作。現在我知道了,謝謝! – Coder949

1

你可以做你查詢的簡單隻有一個切片:

if query: 
    if categoryid == "6": 
     advertisements = Advertisement.objects.filter(title__contains=query) 
    else: 
     advertisements = Advertisement.objects.filter(category__id=categoryid, title__contains=query) 
else: 
    if categoryid == "6": 
     advertisements = Advertisement.objects.all() 
    else: 
     advertisements = Advertisement.objects.filter(category__id=categoryid) 

inteval = slice(int(offset), int(offset)+2)) 
for advertisement in advertisements[inteval]: