2011-12-15 27 views
0

私はpythonとdjangoの新機能で、model.pyファイルで数学関数を実行するのに問題があります。'Module'オブジェクトは呼び出し可能ではありません

class Orders(models.Model): 
    ... 
    total = models.DecimalField(
           max_digits = 6, 
           decimal_places = 2, 
           null = True, 
           blank = True, 
          ) 
    ... 


    def shipping(self): 
     t = self.total 
     ship_rate = 0.12 
     return(t*ship_rate) 

私は

dat = Orders.object.get(pk=12) 
dat.shipping() 

Pythonシェルでそれを呼び出すとそれから私は、次のエラーメッセージが表示されます。

Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "C:\xx\xx\models.py", line 613, in shipping 
ship_rate = 0.12 
TypeError: 'module' object is not callable 

誰もが私が間違っているのかを見ることができますか?それはOrder代わりのorders

+1

エラーが 'ship_rate = 0.12'行で起こっていると言いますか? – NPE

+0

はい、それはエラー –

+0

Hmの行です...それは*非常に奇妙です。完全なスタックトレースを表示できますか? – NPE

答えて

6

エラーはあなたが

ship_rate = decimal(0.12) 

を使用するのでこれが

ship_rate = decimal.Decimal(0.12) 

decimalあるべきではモジュールの名前です。あなたはモジュールを呼び出すことはできません、それはエラーメッセージのことです。あなたが持っている奇妙なトレースバックの理由は、モジュールソースとメモリ内のコードが同期していないからです。トレースバックが作成されると、実際に実行されているコードのバージョンではない現在のバージョンのファイルが使用されます。最新のバージョンのコードを使用していることを確認するには、常にWebサーバーをリロードしてください。

+0

私はまだ同じ 'モジュール'を呼び出すことができませんエラー –

+0

@David__:その後、古いコードはまだ実行されています。どのウェブサーバーを使用していますか?コードに最新のバージョンが実際に使用されていることを確認できるように、応答に表示されることが保証されている同じファイルにいくつかの変更を加えてください。 –

+1

私はあなたがPythonシェルからこれを実行したことに気付きました。この場合、WebサーバではなくPythonを再起動してください。 Pythonは、 'reload()'を明示的に使用しない限り、モジュールをインポートするとモジュールをリロードしません。 –

0

は単数形の名前ですタイプミス:マネージャはobjectsと呼ばれます。

2

Aのように見えるかもしれないので、あなたは、あなたがorder.shipping()

Pythonのクラスの大会でも、資本クラス名OrderとDjangoの規則で呼び出すことができるクラスorder = orders()をインスタンス化する必要が

+1

これはエラーを引き起こす原因ではありません。数学で数を使用するものを除いて、モデル上の他のすべてのクエリは正常に動作します。 –

+1

この例では誰でも再現可能なサンプルを作成して、正しいコードを入力してください。あなたが与えている例がエラーの原因となっている行に到達しない場合でも、問題の解決に役立つことは不可能です。また、もう少しstacktraceがいいでしょう。 – tback

関連する問題