2013-09-27 61 views
0

當我增加一個變量時,它只會上升到2而不是3.默認值是1.我不知道我在想什麼。任何幫助表示讚賞。Django Views Incrementing Variables

def unanswered(request, template ='unanswered.html'): 
    phone_number = Pool.objects.order_by('?')[0] 
    pool = Pool.objects.order_by('?')[0] 
    pool_list = Pool.objects.all() 
    number_attempts = Pool.objects.filter(phone_number=phone_number).count() 


    # unanswer number action 

     if pool_list: 
      if number_attempts > 3: 
       return number_attempts 

      else: 
       x = number_attempts 
       x += 1 
       print x 'returns 2' 
       store = Pool(id=phone_number.id, 
          phone_number = phone_number.phone_number, 
          un_answered=x, answered=0) 
       store.save() 

    payload = {'pool':pool,} 

    return render_to_response(template, payload, context_instance=RequestContext(request)) 
+0

從你的問題,我不能猜測什麼是number_attempts'的''中塊else'的價值。如果它是'1',那麼'x + = 1'確實應該返回'2'。 :-) –

+0

number_attempts,它計算它獲得的確切phone_number的數量。所以默認它是1,然後我想繼續增加,直到它達到3. – Infinixd

回答

1

。在你的代碼中沒有任何for loopwhile loop,因此,如果初始number_attempts是1,這將增加至2並完成流程。

我看到你想在數據庫中存儲企圖,但你所做的方式是不正確的。您正在通過id=phone_number.idStore(...),如果存在給定的id,它將嘗試更新現有記錄。所以Pool.objects.filter(phone_number=phone_number).count()始終返回1.

您可能希望將其更改爲

store = Pool(phone_number = phone_number.phone_number, 
      un_answered=x, answered=0) 

所以下一個請求,Pool.objects.filter(phone_number=phone_number).count()會給你意見後2


更新:

我想要的只是從1,2,3更新un_answered字段。

在這種情況下,請不要使用.count()來獲取嘗試失敗次數使用具有該計數器的對象中的字段。

所以不是

number_attempts = Pool.objects.filter(phone_number=phone_number).count() 

你可以做到這一點

try: 
    store = Pool.objects.get(phone_number=phone_number) 
    number_attempts = store.un_answered 

# FIX : the original code used a bare except clause. 
# Bare except clauses are EVIL. DONT use bare except clauses. NEVER. 
# Or thou shall burn in the flames of hell for your eternal death.... 

except Pool.DoesNotExist: 
    store = Pool(phone_number = phone_number.phone_number, 
       un_answered=1, answered=0) 
    store.save() 
    number_attempts = 1 

... 
if pool_list: 
     if number_attempts > 3: 
      return number_attempts 

     else: 
      x = number_attempts 
      x += 1 
      print x 'returns 2' 
      store.un_answered = x 
      store.save() 
+0

這不符合我的要求。它一遍又一遍地創建相同的電話號碼。我想要的只是從1,2,3更新un_answered字段。這就是爲什麼我添加了ID,因此它只是更新記錄,而不是創建新記錄。 – Infinixd

+0

@Infinixd,在這種情況下檢查更新的答案。順便說一下,指定'id'來創建對象通常不是個好主意。 – Rohan

+2

@Rohan:請不要在裸露的'except'子句中發佈代碼片段。 Bare'except'從句是EVIL。永遠不要假設你知道引發了哪個異常。在上面的例子中(固定),你想要抓住'Pool.DoesNotExist'而沒有別的。 –