1

我在其中一个 Django 模型中有一个自定义方法,它执行一些常规的数据库数据获取和求和。就这个:

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
4

2 回答 2

1

似乎你还没有导入datetime构造函数,如果你使用它,你会得到一个幼稚的日期时间,这会产生一个变暖,因为该结构不包含tzinfo对象,所以尝试为那个日期时间使用一个时区感知构造函数或使用make_aware.

查看有关该主题的这篇文档,我相信您会以最合适的方式解决它时区和实用程序

于 2013-01-28T18:51:15.843 回答
1

正如回溯所示,它不是被视为 的方法None,而是您在其中调用的函数之一。我猜你已经重新定义了该模块中的任何一个datetimeCount其他地方。

此外,这不是问题,但请注意,您不应该now()在函数定义中调用:这样做会修复进程启动时的默认值,而不是每次调用时都获取一个新值。你应该这样做:

def getTotalMonthlyBackers(self, monthdate=None):
    if monthdate is None:
        monthdate = now()
于 2013-01-28T19:09:36.370 回答