我在其中一个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'])
当我尝试通过
调用该方法时print project.getTotalMonthlyBackers()
我收到错误:'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
答案 0 :(得分:1)
您似乎尚未导入datetime
构造函数,如果您使用它,您将获得天真日期时间,这会产生变暖,因为该结构不会包含tzinfo
对象,因此请尝试为日期时间使用时区感知构造函数,或使用make_aware
。
查看有关该主题的这篇文档,我相信您会以最恰当的方式解决它Timezones and utils
答案 1 :(得分:1)
正如追溯所示,它不是被视为None
的方法,而是您在其中调用的一个函数。我猜你已经重新定义了该模块中其他地方的datetime
或Count
。
此外,这不是问题,但请注意,您不应在函数定义中调用now()
:这样做会修复进程启动时的默认值,而不是每个都获取一个新值它被称为时间。你应该这样做:
def getTotalMonthlyBackers(self, monthdate=None):
if monthdate is None:
monthdate = now()