Почему число, полученное от этой функции генератора случайных кодов, не сохраняется в БД?

Я пытаюсь сгенерировать случайный код выкупа, когда пользователь покупает один из моих продуктов.

Проблема заключается в том, что когда случайный код существует, а функция GetRandomRedeemCode генерирует новый код, он не сохраняется Django в БД. В чем может быть проблема?

Вот код, который вызывается каждый раз, когда размещается новый заказ:

def CompleteOrder(request):
    order_qs = Purchase.objects.filter(user=request.user, ordered=False)
    if order_qs:
        specific_order = order_qs[0]
        for order in specific_order.product_purchased.all():
            order.item.purchased_by.add(request.user)
        specific_order.ordered = True
        specific_order.total_price = specific_order.get_total()
        *specific_order.redeem_code = GetRandomRedeemCode()*
        specific_order.save()
        return redirect("OrderCompletedSuccessURL")

А это функция GetRandomRedeemCode(), которая вызывается для создания случайного кода и проверки того, есть ли этот случайный код уже в БД, т.е. уникальности.

def GetRandomRedeemCode():
    random_num = str(random.randint(10000000,99999999))
    if Purchase.objects.filter(redeem_code=random_num).exists():
        GetRandomRedeemCode()
    else:
        return random_num

Вы не возвращаете рекурсивный вызов:

def GetRandomRedeemCode():
    random_num = str(random.randint(10000000, 99999999))
    if Purchase.objects.filter(redeem_code=random_num).exists():
        return GetRandomRedeemCode()  # 🖘 return the result
    else:
        return random_num

Однако лучше использовать цикл while здесь:

def GetRandomRedeemCode():
    random_num = str(random.randint(10000000, 99999999))
    while Purchase.objects.filter(redeem_code=random_num).exists():
        random_num = str(random.randint(10000000, 99999999))
    return random_num
Вернуться на верх