2017-01-09 1 views
1

장고에 응용 프로그램을 작성 중입니다. 첫 번째 10 명의 사용자가 첫 번째 구매에서 내릴 것이라는 요구 사항이 있습니다. 그리고 돈 공제는 cron으로 작성되었습니다. 사용자 입력이 없습니다.if 문을 영원히 실행하고 싶지 않음

여기서 내가 할 수있는 것은 사용 된 DB (boolean)처럼 열을 유지하고 사용 여부를 확인하는 것입니다.

그러나 어떤 시점에서는 1 달을 말하고 모든 10 인 1 사용자가이 조건을 확인할 때마다 코드를 구매했다고 가정합니다.

내 앱이 영원히 돌아가 리라고 가정 할 때, 이것을 구현하는 방법이 있다고 생각 했으므로 if를 쓸 필요가 없습니다.

예컨대 models.py

class User(something): 
    .... 
    user = something.Boolean() 

1 (10)의 모든 사용자가 프로모션을 사용한 시간 후 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) 

. 그래서 나는 문이 나의 FUNC의 x가있는 경우 그 추한을 제거하려면 :

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

답변

1

난 당신이 여기 요구하는지 정말 모르겠어요. 당신이 used 플래그를 설정하지 않고 처음 10 사용자를 얻고 싶다면

, 당신은 대신 모든 사용자를 얻는 이렇게해야

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

"첫 번째"10을 보장해야합니다. 즉, OP의 주문 선택 사항에 이릅니다. – Sayse

+0

아니요, 모든 사용자를 얻으 려하지만 첫 번째 10 일에는 특별 한 선례가 있습니다. 그런 다음 다른 모든 사람들과 마찬가지로 정상적인 사용자입니다. – adam5010

0

를 추한 때문에이 점은 if 문을 피하기 위해하는 경우 - 그렇게 할 수 없다면 쓸모없는 if 문을 제거하기 위해 TODO Codetag을 배치하는 것이 좋습니다.

당신은 if 문에 잘하지만, if user in 1st 10 and not user.usedTrue로 평가되지 않습니다 보장 후 런타임에 함수를 재정의 할 수 있습니다 성능을 얻을 수 아래 단순화 재정의를보고 싶은 경우,이 아무튼을 올바른 동안

def new_x(): 
    print 3 


def x(): 
    print 2 
    global x 
    x = new_x 


x() # 2 
new_x() # 3 
x() # 3 
관련 문제