2013-09-27 2 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, он подсчитывает номер точного номера телефона, который он получает. Поэтому по умолчанию это 1, затем я хочу продолжать увеличивать его до достижения 3. – Infinixd

ответ

1

Там нет какой-либо for loop или while loop в коде, так что если начальная number_attempts является 1, она увеличивается до 2 и завершить поток.

Я вижу, что вы хотите хранить попытки в БД, но то, как вы делаете, неверно. Вы передаете id=phone_number.id в Store(...), который попытается обновить существующую запись, если существует с данным 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.


Update после комментария:

Все, что я хочу, это обновить поле un_answered от 1,2,3.

В этом случае не используйте .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

Это не работает так, как я хочу. Он создает один и тот же номер телефона снова и снова. Все, что я хочу, это обновить поле un_answered от 1,2,3. Вот почему я добавил идентификатор, чтобы он просто обновлял запись, а не создавал новую. – Infinixd

+0

@Infinixd, в этом случае проверьте обновленный ответ. BTW, указав 'id' для создания объекта, как правило, не очень хорошая идея. – Rohan

+2

@Rohan: ПОЖАЛУЙСТА, НЕ публикуйте фрагменты кода с гласным предложением except. Законами 'except' являются EVIL. НИКОГДА не предполагайте, что вы знаете, какое исключение было поднято. В приведенном выше случае (исправлено) вы хотите поймать 'Pool.DoesNotExist' и ничего больше. –