我只需要獲取資料庫中存在的上個月的物件。我不是指最近 30 天或最后一個日歷月,而是資料庫中記錄的最近一個月...我已經看到 django 具有 latest() 函式,該函式回傳基于表中的最新物件在給定的欄位中,但是我希望它根據給定的月份回傳多個物件。
revisoes = Revisao.objects.filter(apicultor__in=apicultores).order_by('-data_registro')
這是我正在使用的查詢集,只有它回傳給定養蜂人的所有修訂。我需要它只回傳基于“ data_registro ”欄位上個月的修訂
uj5u.com熱心網友回復:
您可以使用包 [readthedocs.io]的relativedelta物件 [readthedocs.io]確定上個月,并使用它來檢索上個月的專案:dateutil
from dateutil.relativedelta import relativedelta
from django.utils.timezone import now
revisoes = Revisao.objects.filter(
apicultor__in=apicultores, data_registro__gte=now()-relativedelta(months=1)
).order_by('-data_registro')
或者如果您想從月初開始檢索專案,您可以使用:
from calendar import monthrange
from datetime import datetime
some_datetime = datetime(2022, 1, 28, 15, 15)
start = some_datetime.date().replace(day=1)
end = some_datetime.date().replace(day=monthrange(some_datetime.year, some_datetime.month)[1])
revisoes = Revisao.objects.filter(
apicultor__in=apicultores, data_registro__range=[start, end]
).order_by('-data_registro')
或者如果data_registro是DateTimeField:
from calendar import monthrange
from datetime import datetime
some_datetime = datetime(2022, 1, 28, 15, 15)
start = some_datetime.date().replace(day=1)
end = some_datetime.date().replace(day=monthrange(some_datetime.year, some_datetime.month)[1])
revisoes = Revisao.objects.filter(
apicultor__in=apicultores, data_registro__date__range=[start, end]
).order_by('-data_registro')
uj5u.com熱心網友回復:
解決方案:我解決了我的問題如下:
meses = [obj.data_registro for obj in revisoes]
ultimo_mes = max(meses)
ultimo_mes = ultimo_mes.strftime("%Y-%m")
revisoes_recentes = Revisao.objects.filter(apicultor__in=apicultores, data_registro__contains=ultimo_mes)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422727.html
標籤:
上一篇:我無法發布資料-Django
下一篇:嵌套值Json和Python
