2011-12-15 16 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) 

Когда я зову его в оболочке Python

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

Затем я получаю следующее сообщение об ошибке:

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 

Может кто-нибудь увидеть, что я делаю не так?

+1

Вы говорите, что ошибка происходит на линии 'ship_rate = 0.12'? – NPE

+0

да, то есть линия через ошибку –

+0

Hm ... это * очень * нечетный. Не могли бы вы показать полную трассировку стека? – NPE

ответ

6

Ошибка в том, что вы использовали

ship_rate = decimal(0.12) 

Это должно быть

ship_rate = decimal.Decimal(0.12) 

decimal это имя модуля. Вы не можете вызвать модуль, вот что говорит сообщение об ошибке. Причиной странной трассировки стало то, что исходный код модуля и код в памяти вышли из синхронизации. Когда создается трассировка, используется текущая версия файла, которая, возможно, не является версией фактически запущенного кода. Всегда перезагружайте свой веб-сервер, чтобы убедиться, что он использует самую последнюю версию вашего кода.

+0

Я все равно получаю тот же «модуль», что не вызываемая ошибка –

+0

@David__: Затем старый код все еще работает. Какой веб-сервер вы используете? Попытайтесь внести некоторые изменения в тот же файл, который, как гарантируется, будет отображаться в ответе, чтобы убедиться, что вы действительно используете самую последнюю версию кода. –

+1

Я только что заметил, что вы запускали это из оболочки Python. В этом случае перезапустите Python, а не веб-сервер. Python не перезагружает модули после их импорта, если вы явно не используете 'reload()'. –

0

Вы должны создать экземпляр класса order = orders(), то вы можете позвонить order.shipping()

питоным класс конвенция также капитал Имена классов Order и условные Джанго сингулярно имя, чтобы оно могло быть Order вместо orders

2

выглядит как Опечатка: Менеджер называется objects.

+1

Это не то, что вызывает ошибку. Все остальные запросы на модели работают отлично, за исключением тех, которые используют номер в математике. –

+1

Попробуйте создать пример, который может быть воспроизведен всеми участниками здесь и, пожалуйста, укажите правильный пример в примере. Невозможно помочь решить проблему, когда пример, который вы даете, даже не достигнет строки, вызывающей ошибку. Также: немного больше stacktrace было бы хорошо. – tback

Смежные вопросы