Getting all items less than a month old

2020-06-30 05:33发布

Is there a way to get all objects with a date less than a month ago in django.

Something like:

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

3条回答
欢心
2楼-- · 2020-06-30 05:51

Do this:

from datetime import datetime, timedelta

def is_leap_year(year): 
    if (year % 4) == 0: 
        if (year % 100) == 0: 
            if (year % 400) == 0: 
                return True
            else: 
                return False
        else: 
             return True
    else: 
        return False

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)

This will cater for all cases I can think of.

查看更多
▲ chillily
3楼-- · 2020-06-30 05:58

What is your definition of a "month"? 30 days? 31 days? Past that, this should do it:

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

Takes advantange of the gte field lookup.

查看更多
The star\"
4楼-- · 2020-06-30 05:59
items = Item.objects.filter(created_date__gte=aMonthAgo)

Where aMonthAgo would be calculated by datetime and timedelta.

查看更多
登录 后发表回答