Удаление данных 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()