Django Записи фильтра ORM в период с 15-го числа последнего месяца до 15-го числа текущего месяца - PullRequest
1 голос
/ 16 марта 2020

Я хочу отфильтровать записи набора запросов с 15-го числа предыдущего месяца до 15-го текущего месяца.

Кто-нибудь знает, как это сделать?

Models.py

class Book(models.Model):
    name = models.CharField(max_length=100, null=True)
    author = models.CharField(max_length=100, null=True)
    created_on = models.DateTimeField(auto_now_add=True)

Views.py

class BookView(View):
    def get(self, *args, **kwags):
        start_date = '15th_of_previous_month'
        end_date = '15th_of_current_month'
        qs = Book.objects.filter(created_on__gte=start_date,created_on__lt=end_date)
        ...

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы можете получить 15-е число текущего месяца с помощью:

from django.utils.timezone import now

this_month_15 = now().date().replace(day=15)

Вычисление предыдущего месяца можно выполнить, вычтя 15 дней, а затем снова замените параметр day на 15:

from datetime import timedelta

prev_month_15 = (this_month_15 - timedelta(days=15)).replace(day=15)
0 голосов
/ 16 марта 2020

Вот как я пытаюсь это решить:

import datetime

today = datetime.date.today()
first = today.replace(day=1)  # first date of current month
previous_month_date = first - datetime.timedelta(days=1)  # this will be the last day of previous month
start_date = datetime.datetime.strptime(str(previous_month_date.year) + '-' + str(previous_month_date.month) + '-15', '%Y-%m-%d')
end_date = first + datetime.timedelta(days=15)
qs = Book.objects.filter(created_on__gte=start_date,created_on__lt=end_date)
...