我正在Django中编写应用程序。有一个要求,前10名用户将在第一次购买时下车。扣除金钱是用cron编写的。没有用户输入。
我在这里可以做的是将db中的列维护为used(boolean)并检查是否使用。
但是在某个时间点让我们说1个月并且假设所有前10个用户都购买了某些代码,但每次这个条件仍会检查。
假设我的应用程序将永远运行,我认为有一种方法可以实现这一点,这样我就不用写了。
例如models.py
class User(something):
....
user = something.Boolean()
tasks.py
def x():
users = User....all()
for user in users:
if user in 1st 10 and not user.used:
charge(100)
else:
charge(150)
经过一段时间后,10月1日的每位用户都使用了促销活动。 所以我想删除那个丑陋的if语句,所以我的func x是:
def x():
users = User....all()
for user in users:
charge(150)
答案 0 :(得分:1)
我不确定你在这里问的是什么。
如果你想获得没有设置used
标志的前10个用户,那么你应该这样做,而不是让所有用户:
users = User.objects.filter(used=False)[:10]
答案 1 :(得分:0)
如果要避免if语句,因为它很丑陋 - 你不能这样做,我建议你放置TODO Codetag来删除无用的if语句。
如果您对if语句没有问题,但想要获得性能,那么在确保if user in 1st 10 and not user.used
永远不会评估为True
之后,您可以在运行时覆盖您的函数,请参阅下面的简化覆盖:
def new_x():
print 3
def x():
print 2
global x
x = new_x
x() # 2
new_x() # 3
x() # 3