当我试图在Django中运行这个删除超过30天的访客帐户的定制命令时,为什么我收到错误消息"‘Datetime.timezone’没有属性‘Now’"?它可以在views.py中的其他地方工作,我在那里以同样的方式导入了它.由于命令位于不同的文件夹中,我是否必须以不同的方式导入它?(管理/命令/)

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
from datetime import timedelta

而且它会发挥更好的作用.Django也使用DateTime.

Python相关问答推荐

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

将输入管道传输到正在运行的Python脚本中

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

numpy卷积与有效

如何在给定的条件下使numpy数组的计算速度最快?

UNIQUE约束失败:customuser. username

如何在Python中获取`Genericums`超级类型?

使用Python查找、替换和调整PDF中的图像'

Gekko中基于时间的间隔约束

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

如何删除重复的文字翻拍?

如何从比较函数生成ngroup?

如何使用matplotlib查看并列直方图

如何在Django模板中显示串行化器错误

Pythonquests.get(Url)返回Colab中的空内容

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

如果列包含空值,则PANAS查询不起作用

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)

使用Scikit的ValueError-了解