為什么我在嘗試在 Django 中運行洗掉超過 30 天的訪客帳戶的自定義命令時收到錯誤“'datetime.timezone' has no attribute '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()
uj5u.com熱心網友回復:
from django.utils import timezone
您需要像這樣匯入它,這是檔案
uj5u.com熱心網友回復:
將匯入更改為:
from django.utils import timezone
from datetime import timedelta
它會更好地作業。Django 也使用日期時間。
uj5u.com熱心網友回復:
當我們嘗試直接在 datetime 模塊上呼叫 now 方法時,會出現錯誤“AttributeError module 'datetime' has no attribute 'now'”。要解決錯誤,請使用以下代碼
import datetime
print(datetime.datetime.now())
print(timezone.now())
它會成功的
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525693.html
標籤:Pythondjango
上一篇:.NETMAUI的登錄頁面
