0

変数の 1 つをインクリメントすると、3 ではなく 2 にしか増えません。デフォルト値は 1 です。何が欠けているのかわかりません。どんな助けでも大歓迎です。

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))
4

1 に答える 1

1

コードには anyfor loopまたはがないwhile loopため、initialnumber_attemptsが 1 の場合、2 にインクリメントされてフローが完了します。

試行をDBに保存したいのですが、あなたのやり方は正しくありません。指定された で既存のレコードが存在する場合、既存のレコードを更新しようとid=phone_number.idします。したがって、常に 1 を返します。Store(...)idPool.objects.filter(phone_number=phone_number).count()

あなたはそれをに変更したいかもしれません

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

したがって、次のリクエストでPool.objects.filter(phone_number=phone_number).count()は 2 が返されます。


コメントの後に更新します。

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()
于 2013-09-27T06:39:35.460 に答える