Django Naturaltime不在.annotate中工作

时间:2017-05-24 02:29:58

标签: python django django-models django-annotate

在这里,我只是想在模型上注释一个字段,该字段提供人类可读的格式,说明自创建以来已经过了多长时间

My Model is created 30 seconds ago

我的模特说明:

from django.db import models 
class MyModel(models.Model):
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

class Meta:
    ordering = ['-created_at']

@property
def natural_time(self):
    return naturaltime(self.created_at)

我的所作所为

from django.contrib.humanize.templatetags.humanize import naturaltime
from django.db.models import F
from .models import MyModel
m = MyModel.objects.annotate(timesincecreated=naturaltime(F('created_at'))
print m.values('timesincecreated')

在这个打印电话上我得到了我在模型中使用的DateTimeField。 但如果我想进入该物业。

from .models import MyModel
m= MyModel.objects.first()
print m.natural_time

有效。

有任何帮助吗? TIA。

1 个答案:

答案 0 :(得分:1)

您不能对naturaltime使用annotation函数,annotation是在数据库级别完成的计算。

Django只提供一组可由数据库处理的基本计算,如Count, Sum, Min, Max等。您可以参考official doc了解有关Query Expressions的更多信息。