django 为什么从这个随机码发生器函数中得到的数字没有保存在DB中?

yyhrrdl8  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(126)

我正在尝试为用户购买我的产品之一时生成一个随机兑换代码。
问题是,一旦随机码存在,GetRandomRedeemCode函数生成一个新的代码,Django就不会将其保存到DB中。
这是每次下新订单时都会调用的代码:

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
yhived7q

yhived7q1#

你不返回递归调用:

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

相关问题