27

djangoで1か月未満の日付を持つすべてのオブジェクトを取得する方法はありますか.

何かのようなもの:

items = Item.objects.filter(less than a month old).order_by(...)
4

3 に答える 3

54

あなたの「月」の定義は何ですか?30日?31日?それを過ぎると、これでうまくいくはずです:

from datetime import datetime, timedelta
last_month = datetime.today() - timedelta(days=30)
items = Item.objects.filter(my_date__gte=last_month).order_by(...)

gteフィールド ルックアップを利用します。

于 2009-06-11T05:50:09.693 に答える
3

これを行う:

from datetime import datetime, timedelta

def is_leap_year(year): 
    if year % 100 == 0:
        return year % 100 == 0

    return year % 4 == 0

def get_lapse():
    last_month = datetime.today().month
    current_year = datetime.today().year

    #is last month a month with 30 days?
    if last_month in [9, 4, 6, 11]:
        lapse = 30

    #is last month a month with 31 days?
    elif last_month in [1, 3, 5, 7, 8, 10, 12]:
        lapse = 31

    #is last month February?
    else:
        if is_leap_year(current_year):
            lapse = 29
        else:
            lapse = 30

    return lapse

last_month_filter = datetime.today() - timedelta(days=get_lapse())

items = Item.objects.filter(date_created__gte=last_month_filter)

これは、私が考えることができるすべてのケースに対応します。

于 2020-05-17T23:42:32.890 に答える
1
items = Item.objects.filter(created_date__gte=aMonthAgo)

aMonthAgo は datetime と timedelta によって計算されます。

于 2009-06-11T05:51:41.687 に答える