2017-05-24 3 views
0

に動作していないジャンゴNaturaltimeは.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') 

です私がモデルで使った。 しかし、そのプロパティにアクセスしたい場合。

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

これは機能します。

助けが必要ですか? TIA。

答えて

1

naturaltimeの機能をannotationに使用することはできません。annotationは、データベースレベルで行われる計算です。

DjangoはCount, Sum, Min, Maxなどのデータベースで処理できる基本的な計算のみを提供します。Query Expressionsについては、official docを参照してください。

+0

はい私は後でそれを発見しました。私はそれがそのまま日付を渡すだろうと思います。私はフロントエンドに '' 'moment.js'''を使ってそれを行うべきだと思います。 –

+0

あなたは日付として渡すことができますし、 'naturaltime'または' timesince'をテンプレートに使用します。これはjavascriptで行う必要はありません。 –

+0

私はREST Apiを構築しています。フロントエンドは他のフレームワークを使用しています。だから私はそれが私が持つことができる唯一の解決策だと思う。 –

関連する問題