2014-04-13 80 views
0

我剛開始亂用@property,我有一個似乎默默地消失,我想不通爲什麼:Django的模型@property失敗默默

class Tap(models.Model): 

    beer = models.CharField(max_length=20) 
    ibu_actual = models.IntegerField(default=0) 
    og_actual = models.DecimalField(max_digits=4, 
      decimal_places=3, default=0) 
    fg_actual = models.DecimalField(max_digits=4, 
      decimal_places=3, default=0) 

    @property 
    def calories(self): 
     if (self.og_actual == 1 and self.fg_actual == 1): 
      print "0 kCal" 
      return 0 
     else: 
      calories_from_alcohol = (1881.22 * (self.fg_actual * (self.og_actual self.fg_actual))) 
      calories_from_carbs = 3550 * self.fg_actual * ((0.1808 * self.og_actual) + (0.8192 * self.fg_actual) - 1.0004) 
      print "%d kCal" % (calories_from_alcohol + calories_from_carbs) 
      return calories_from_alcohol + calories_from_carbs 

在我的模板,只是熱量返回空白,並且在'runserver'下運行時,我的打印字符串從不出現。我添加了 TEMPLATE_STRING_IF_INVALID =「無效字符串'%s'」 到我的設置,並且它顯示沒有任何東西正在生成模板顯示。 例如,如果我愚蠢的計算,每個設置爲1,那麼它的工作原理。 所以我猜測數學會因爲某種原因而失敗?不同的屬性做工作:

@property 
def bugu(self): 
#BU:GU is (ibu/((og-1)*1000)) if og > 1 
    if self.og_actual > 1: 
     print "bugu" 
     return (self.ibu_actual/((self.og_actual-1)*1000)) 
    else: 
     return 0 

和我的數學在shell工作:

(InteractiveConsole) 
>>> fg = 1.011 
>>> og = 1.051 
>>> fg + og 
2.062 
>>> (1881.22 * (fg * (og -fg))) 
76.07653680000006 
>>> 3550 * fg * ((0.1808 * og) + (0.8192 * fg) - 1.0004) 
63.99993959999945 
>>> 

我不以任何方式蟒蛇高手,所以我難倒!

謝謝。

更新: 我加了一對夫婦更調試打印語句,並正在進入功能:

Starting development server at http://192.168.0.15:7000/ 
Quit the server with CONTROL-C. 
bugu 
starting calories 
calculating calories from carbs 
bugu 
starting calories 
calculating calories from carbs 
bugu 
starting calories 
calculating calories from carbs 
[13/Apr/2014 05:26:30] "GET/HTTP/1.1" 200 7530 

我試着換了酒精和碳水化合物計算的順序,但它似乎並沒有發揮一個差異,它停在任何一個。

+0

你從哪裏得到想要打印的內容會顯示在模板中的想法? –

+0

我的打印語句應該在http請求之前的'runserver'下顯示。它爲bugu屬性(和其他)提供了功能,但不適用於卡路里功能。我不打算在我的模板中顯示要打印的內容。 – dennyreiter

+0

這是你在班級或實例中唯一的「卡路里」嗎? –

回答

0

我回到了Django的外殼,並詢問我的對象那裏收到一個錯誤:

TypeError: unsupported operand type(s) for *: 'float' and 'Decimal' 

,並回答我的問題就在這裏:https://github.com/plomino/Plomino/issues/308

所以我將我的十進制領域魚漂等現在它工作。我會留下這個後代,並希望有一天會幫助別人。