Django方法在那里,但是当我试图调用

2024-09-29 19:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个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

Tags: django方法infrompyimportprojectdatetime
2条回答

正如回溯显示的,它不是被视为None的方法,而是您在其中调用的函数之一。我猜您已经在该模块的其他地方重新定义了datetime或{}。在

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

def getTotalMonthlyBackers(self, monthdate=None):
    if monthdate is None:
        monthdate = now()

似乎您还没有导入datetime构造函数,如果您使用它,您将得到一个天真的日期时间,这将产生一个暖化,因为该结构不包含tzinfo对象,所以请尝试为该datetime使用时区感知构造函数,或者使用make_aware。在

看看这篇关于这个主题的文档,我相信你会以最恰当的方式解决它Timezones and utils

相关问题 更多 >

    热门问题