我在一个Django模型中有一个自定义方法,它执行一些常规的DB数据获取和求和。这是它:
from django.utils.timezone import utc, now
...
class Project(models.Model):
...
def getTotalMonthlyBackers(self, monthdate=now()):
from pledger.models import DonationHistory
return (DonationHistory.objects
.filter(project=self)
.filter(datetime_sent__gte=datetime(monthdate.year, monthdate.month, 1))
.aggregate(Count('user', distinct=True))['user__count'])
当我试图调用方法
^{pr2}$我收到错误:'NoneType' object is not callable
但是,如果我输出方法本身只是为了检查它是否不是一个输入错误:
print project.getTotalMonthlyBackers
我得到:<bound method Project.getTotalMonthlyBackers of <Project: Putty>>
所以方法就在那里,并绑定到某个Project
对象。
Python中有一些非常明显的东西我无法调用这个方法,但是我无法从手册中找到它。在
回溯:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/mnt/hgfs/Projects/BitFund/Sources/source/project/views/project_view_details.py" in view
101. print project.getTotalMonthlyBackers()
File "/mnt/hgfs/Projects/BitFund/Sources/source/project/models.py" in getTotalMonthlyBackers
76. .filter(datetime_sent__gte=datetime(monthdate.year, monthdate.month, 1))
Exception Type: TypeError at /putty_1
Exception Value: 'NoneType' object is not callable
正如回溯显示的,它不是被视为}。在
None
的方法,而是您在其中调用的函数之一。我猜您已经在该模块的其他地方重新定义了datetime
或{另外,这不是问题所在,但是请注意,您不应该在函数定义中调用
now()
:这样做可以修复进程启动时的默认值,而不是每次调用时都获得一个新值。您应该这样做:似乎您还没有导入
datetime
构造函数,如果您使用它,您将得到一个天真的日期时间,这将产生一个暖化,因为该结构不包含tzinfo
对象,所以请尝试为该datetime使用时区感知构造函数,或者使用make_aware
。在看看这篇关于这个主题的文档,我相信你会以最恰当的方式解决它Timezones and utils
相关问题 更多 >
编程相关推荐