Удаление данных django без RuntimeWarning: Поле DateTimeField получило наивное время даты

Я пытаюсь удалить данные 3-летней давности в моей базе данных python django. Вот код:

from datetime import datetime
from dateutil.relativedelta import relativedelta

def db_cleanup():
    cleanup_start = datetime.utcnow().date()
    three_years_ago = cleanup_start - relativedelta(years=3)

    MyData.objects.filter(create_date__lt=three_years_ago).delete()

однако я получаю RuntimeWarning: DateTimeField received a naive datetime. Как правильно это сделать?

Используйте timezone.now() для создания осознаваемого времени, затем сбросьте время до полуночи, но сохраните объект времени (не дату):

from django.utils import timezone
from dateutil.relativedelta import relativedelta

def db_cleanup():
    cleanup_start = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
    three_years_ago = cleanup_start - relativedelta(years=3)

    MyData.objects.filter(create_date__lt=three_years_ago).delete()
Вернуться на верх