2014-11-16 263 views
0

我試圖篩選誰的用戶:Django的查詢過濾器

  1. 適合我的喜好
  2. 其偏好適合我
  3. 隨機
  4. 聊天頁面上的最後一個5秒
  5. 排除自己

的問題是,有時有沒有用戶在最近5秒內打開。在這種情況下,我想從查詢中刪除它,因爲它會將我的列表索引超出範圍並拋出錯誤。

因此,我首先定義了我的異常子句,然後希望如果try:塊不會引發indexError,它將被重寫。這不會發生,它仍然會拋出錯誤。我如何避免錯誤?

recent_range = datetime.now() - timedelta(seconds=5) 
all_users = User.objects.filter(gender=user_preference).\ 
    filter(preference=user_gender).order_by('?').exclude(email=request.user.email) 
try: 
    all_users = User.objects.filter(gender=user_preference).\ 
     filter(preference=user_gender).filter(online=recent_range).\ 
     order_by('?').exclude(email=request.user.email) 
except IndexError: 
    pass 
other_user = all_users[0] 
+1

在任何查詢中都沒有任何內容會引發IndexError。它一定是從別的地方來的;請提供完整的追溯。 –

+0

你是對的!這沒有給我indexError。 all_users [0]給了我錯誤。如果我把all_users [0]放在塊中,它就可以工作。謝謝! –

回答

0

丹尼爾羅斯曼幫我解決了這個問題。過濾器沒有拋出錯誤。在空查詢上調用索引是。如果在塊中放入other_user [0],它不會拋出錯誤

all_users = User.objects.filter(gender=user_preference).\ 
    filter(preference=user_gender).order_by('?').exclude(email=request.user.email) 
other_user = all_users[0] 
try: 
    all_users = User.objects.filter(gender=user_preference).\ 
     filter(preference=user_gender).filter(online=recent_range).\ 
     order_by('?').exclude(email=request.user.email) 
    other_user = all_users[0] 
except: 
    pass