0

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

    类 MyObject(模型。模型):
        ...
        student_c = models.PositiveIntegerField(默认=0,空白=真,空=真)
        company_c = models.PositiveIntegerField(默认=0,空白=真,空=真)

    def total_followers(self):
        返回 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

我究竟做错了什么 ?

任何帮助将不胜感激。

谢谢

4

2 回答 2

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()
于 2013-09-17T09:21:06.077 回答
0

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

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

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

project.student_c = project.student_c + 1
于 2013-09-17T11:59:48.810 回答