0

私はを使用してemencia.django.newsletterいます。`python manage.py send_newsletter'を実行すると、このエラーが発生します

if self.newsletter.sending_date <= datetime.now() and \ TypeError: can't compare offset-naive and offset-aware datetimes

これがエラーの原因です。

def can_send(self):

    """Check if the newsletter can be sent"""
if self.test:
    return True

if self.newsletter.sending_date <= datetime.now() and\
   (self.newsletter.status == Newsletter.WAITING or\
    self.newsletter.status == Newsletter.SENDING):
    return True

return False

Django1.4を使用しています

何か案は?

4

1 に答える 1

2

あなたのsending_date値はタイムゾーンに対応していますdatetime.now()が、タイムゾーンはナイーブです。エラーメッセージが示すように、それらを比較することはできません。

答えはnow、比較を行う前にタイムゾーン対応の日時に変換することです。

import datetime
from django.utils.timezone import utc

now = datetime.datetime.utcnow().replace(tzinfo=utc)
if self.newsletter.sending_date <= now and \
    ...

詳細については、ナイーブおよび認識日時オブジェクトに関する Django ドキュメントを参照してください。

于 2012-06-13T10:51:14.657 に答える