Почему я получаю эту ошибку пользовательской команды Django: 'datetime.timezone' не имеет атрибута 'now'

Почему я получаю ошибку "'datetime.timezone' не имеет атрибута 'now'" при попытке запустить эту пользовательскую команду в Django, которая удаляет гостевые учетные записи старше 30 дней? Она работает в другом месте в views.py, куда я импортировал ее таким же образом. Должен ли я импортировать его по-другому, поскольку команда находится в другой папке? (management/commands/)

from django.core.management.base import BaseCommand
from datetime import timezone, timedelta

from gridsquid.models import User, Tile

DEFAULT_TILE_IMG_NAME = "defaultsquid.svg"
MAX_GUEST_ACCOUNT_DAYS = 30

class Command(BaseCommand):
    def handle(self, *args, **options):
        """
        Deletes all guest user accounts and their media if older than MAX_GUEST_ACCOUNT_DAYS
        """
        # Get all guest accounts created before the limit
        expired_guests_count = User.objects.filter(guest=True).filter(date_joined__lt=timezone.now()-timedelta(days=MAX_GUEST_ACCOUNT_DAYS)).count()
        expired_guests = User.objects.filter(guest=True).filter(date_joined__lt=timezone.now()-timedelta(days=MAX_GUEST_ACCOUNT_DAYS))
        
        for guest in expired_guests:
            tiles = Tile.objects.select_related("user").filter(user=guest).all()
            for tile in tiles:
                # Delete image if not default image
                if DEFAULT_TILE_IMG_NAME not in tile.image.url:
                    tile.image.delete()
                # Delete audio file if there is one
                if tile.audio is not None:
                    tile.audio.delete()
            # Delete guest account
            guest.delete()

from django.utils import timezone

Вам нужно импортировать его вот так, это doc

Измените импорт на следующий:

from django.utils import timezone
from datetime import timedelta

И это будет работать лучше. Django также использует datetime.

Вернуться на верх