0

私の目的は、特定の日に作成されたオブジェクトがあるかどうかを確認し、リストに番号を追加することです。しかし、私はそれを完全に間違っているようです。

def week_days_activity(self):

    has = list()

    if ( User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1))):
       has.append(1)  
    else :
       has.append(0)

    if ( User_activity.objects.filter(timestamp__gte=datetime.now() -timedelta(days=2))):
       has.append(2) 
    else :
       has.append(0)
    if ( User_activity.objects.filter(timestamp__gte=datetime.now() -timedelta(days=3))):
       has.append(3)
    else :
       has.append(0)
    return has

タイムスタンプは次のとおりです。

timestamp = models.DateTimeField(auto_now_add=True, db_index=True)

私はstackoverflowを検索しましたが、答えはこれらのスキームを丸めているようですが、おそらく何も得られません。

だから助けてください。ありがとう :)

4

2 に答える 2

1
def week_days_activity(self):

    has = []
    today = datetime.now().today()
    1_day_ago = today - timedelta(days=1)
    2_days_ago = today - timedelta(days=2)
    3_days_ago = today - timedelta(days=3)


    qs = User_activity.objects

    if qs.filter(timestamp__gte = 1_day_ago).count():
        has.append(1)
    else :
       has.append(0)

    if qs.filter(timestamp__range= (2_days_ago, 1_day_ago)).count():
       has.append(2)  
    else :
       has.append(0)

    if qs.filter(timestamp__range= (3_days_ago, 2_days_ago)).count():
       has.append(3)  
    else :
       has.append(0)

    return has

ここについてもっと読む__range

少し読みやすいアプローチ(IMO):

has = [0, 0, 0]

today = datetime.now().today()
1_day_ago = today - timedelta(days=1)
2_days_ago = today - timedelta(days=2)
3_days_ago = today - timedelta(days=3)


qs = User_activity.objects
if qs.filter(timestamp__gte = 1_day_ago).count():
    has[0] = 1

if qs.filter(timestamp__range= (2_days_ago, 1_day_ago)).count():
    has[1] = 2

if qs.filter(timestamp__range= (3_days_ago, 2_days_ago)).count():
    has[2] = 3

return has
于 2013-08-22T15:13:39.203 に答える
1

オブジェクトが存在するかどうかを確認するには、exists演算子を使用できます。

if ( User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1)).exists()):
   has.append(1)  
else :
   has.append(0)

または、len() 演算子を使用して、結果のクエリの長​​さを決定することもできます。指定されたクエリにエントリが存在しない場合はゼロです。

qs_today = User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1)
if len(qs_today) > 0:
   has.append(1)  
else :
   has.append(0)
于 2013-08-22T15:13:57.140 に答える