Почему число, полученное от этой функции генератора случайных кодов, не сохраняется в БД?
Я пытаюсь сгенерировать случайный код выкупа, когда пользователь покупает один из моих продуктов.
Проблема заключается в том, что когда случайный код существует, а функция 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