Django IntegerField返回ExpressionNode

时间:2013-09-16 22:07:44

标签: python django postgresql python-2.7 django-models

我有一个包含两个计数器的模型:

    class MyObject(models.Model):
        ...
        student_c = models.PositiveIntegerField(default=0, blank=True, null=True)
        company_c = models.PositiveIntegerField(default=0, blank=True, null=True)

    def total_followers(self):
        return self.student_c + self.company_c

一个正常工作并返回一个整数值,但另一个返回:

django.db.models.expressions.ExpressionNode object at 0x7ff4d8320a10

我尝试将PositiveIntegerField更改为IntegerField并使用其他名称重命名该字段但我仍然得到相同的结果?我销毁了数据库并重建了很多次

在我的模板中,我可以看到: (+: (DEFAULT: ), 1)

事实上,我正在尝试像这样做一个原子增量:

project = get_object_or_404(Project, pk=kwargs['pk'])
project.student_c = F('student_c') + 1
project.save(update_fields=['student_c']) or even just project.save()

这就是问题的根源所在。我看了看,发现了相同的代码: Atomic increment of a counter in django

我做错了什么?

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

我不知道这是否与您的问题类似,但也许可以帮助您

http://www.voidspace.org.uk/python/weblog/arch_d7_2011_04_30.shtml

也许您需要在视图中调用total_followers之前调用.save ...

例如:

import model.MyObject

myObj = MyObject.objects.create(....)
myObj.save()

myObj.total_followers()

答案 1 :(得分:0)

我不确定你是否正确使用了F()对象。你有没有试过

Projects.objects.filter(pk=kwargs['pk']).update(student_c=F('student_c') + 1)

这将取代这三行。你也可以尝试第二行:

project.student_c = project.student_c + 1