2016-04-19 15 views
0

は、私がメンバーシップの3種類のための部屋のために3種類の充電スケジュールを持っていると仮定します:1時間あたり$ 9ライティング設定可能なステップ関数

5から12時間:1時間あたり$ 8

メンバー

、0 - 1時間:時間

あたり$ 8

1 - 5時間:時間

5につき$ 7から12時間:時間

プレミアム

0につき$ - 6 1時間:$ 4 /時間

1 - 5時間:$ 3 /時間

5 - 12時間:1時間あたり$ 2

これらはフロントエンドで設定可能な料金です。

動的に格納して計算するベストプラクティスは何ですか?

私はアイデアを持っているが、私はより良いものがそこにあると信じて:

SQL表は:membership_rates

membership,min_hr,max_hr,rate 
normal,0,1,10 
normal,1,5,9 
normal,5,12,8 
member,0,1,8 
member,1,5,7 
member,5,12,6 
premium,0,1,4 
premium,1,5,3 
premium,5,12,2   

次に擬似コードでは、Pythonで

find out membership type 
query the rates for the membership type in an array 

while rent_amt is larger than max_hr of the query: 
    rate = selected_rate from the bracket 
    find next smaller rate 


return the rate * the no. of hours used 

例(Django)は:

amt_used = rent.amt_used 
membership = member.membership 
rates = Rates.objects.filter(membership=membership).order_by(max_rate) 
rate = 0 
while amt_used > rates.max_hr: 
    rate = rates.rate 

return amt_used * rate 
+0

「動的に保存されています」とはどういう意味ですか?これらの価値は頻繁に変わるかもしれない? – vmonteco

+0

はい値を変更できます。 – bryansis2010

答えて

0

私は、変数に値を入れることをお勧め:

CHARGES_SCHEDULES = {"normal" : {0 : {"time" : 1, 
             "per_hour" : 10}, 
           {1 : {"time" : 5, 
             "per_hour" : 9}}, 
           {5 : {"time" : 12, 
             "per_hour" : 8}},}, 
        "member" : {0 : {"time" : 1, 
             "per_hour" : 8}, 
           {1 : {"time" : 5, 
             "per_hour" : 7}}, 
           {5 : {"time" : 12, 
             "per_hour" : 6}},}, 
        "premium" : {0 : {"time" : 1, 
             "per_hour" : 4}, 
           {1 : {"time" : 5, 
             "per_hour" : 3}}, 
           {5 : {"time" : 12, 
             "per_hour" : 2}},}} 

(あなたはもちろんの変数の構造を変更することができます。私はここdictionnariesを使用していますが、タプル、リストまたはより良いあなたのニーズに合わせて何かを使用することができます。)

次に、あなたがあなたのsettings.pyまたは異なるPythonのファイルに直接それを置くことができますいずれか(charges.py例えば)、settings.pyにインポートしてください。

1.解決策1:

あなた設定で直接それを入れてください。PYして、必要なときに単にあなたのpythonファイルに値をインポートします。

anyfile.py

from django.conf import settings 

print(settings.CHARGES_SCHEDULES["member"][1]["time"]) 

2.解決方法2:

は別のPythonのファイルに入れて(例:charges.py)、このファイルをsettings.py

にインポートしてください

settings.py

from charges import CHARGES_SCHEDULES 

、その後、直前(参照のようなあなたの他のpythonファイルでインポート解決策1)。

関連する問題