我有一个包含两个计数器的模型:
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
我做错了什么?
非常感谢任何帮助。
由于
答案 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