2017-01-09 71 views
1

我正在Django寫一個應用程序。有一項要求,前10名用戶將在第一次購買時下車。而扣款是用cron編寫的,所以沒有用戶輸入。不想運行if語句永遠

我能做些什麼是維護數據庫中的列像使用(布爾),並檢查是否使用。

但是在某個時間點讓我們說1個月,並假設所有的前10位用戶都購買了一些代碼,每次這個條件都會檢查代碼。

假設我的應用程序會永遠運行,我在想這是否有一種方法來實現這一點,這樣我就不必寫if。

e.g 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日每個用戶都在使用它的促銷。 所以我想如果語句,這樣我的FUNC X是去除難看:

def x(): 
    users = User....all() 
    for user in users: 
     charge(150) 

回答

1

我真的不知道你問這裏。

如果你想獲得前10級的用戶沒有used標誌設置,那麼你應該這樣做,而不是讓所有用戶:

users = User.objects.filter(used=False)[:10] 
+0

雖然是正確的,這並未'真的不能保證'第一'10,這將歸結於OP的訂購選擇 – Sayse

+0

不,我想讓所有的用戶,但只有1 10有特殊的previlage一次。之後,他們是普通用戶像其他人一樣。 – adam5010

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