3

こんにちは、私は次のようなモデルを持っています:

from datetime import datetime


class Project(models.Model):
    created = models.DateTimeField(editable=False)
    updated = models.DateTimeField(editable=False)
    product = models.ForeignKey('tool.product')
    module = models.ForeignKey('tool.module')
    model = models.ForeignKey('tool.model')
    zipcode = models.IntegerField(max_length=5)

    def save(self, **kwargs):
        if not self.id:
            self.created = datetime.now()
        self.updated = datetime.now()
        super(Project, self).save()

    def __unicode__(self):
        return self.id

ただし、プロジェクトを保存しようとすると、次のようになります。

coercing to Unicode: need string or buffer, long found

そしてランサーバーから:

RuntimeWarning: DateTimeField received a naive datetime (2012-10-31 14:45:36.611622) while time zone support is active.

ここで何が問題なのか正確にはわかりませんがtimezoneDateTimeField.

どんな助けでも大歓迎です。

4

2 に答える 2

4

まず、DateTimeField は次のような自動更新をサポートしています。

created = models.DateTimeField(editable=False, auto_now_add=True) # Only on creation
updated = models.DateTimeField(editable=False, auto_now=True)     # On every save

次に、取得した RuntimeWarning は、settings.py タイムゾーン対応の datetime オブジェクトで有効にしたことを意味します。たとえば、次のように表示されます。

USE_TZ = True

その場合、日時オブジェクトを別の方法で処理する必要があり、明示的にtzinfo値を渡す必要があります。

# install the `pytz` module through pip or whatnot
from pytz import timezone
import datetime
from django.utils.timezone import utc

now = datetime.datetime.utcnow().replace(tzinfo=utc)

# To show the time in Greece
athens = timezone('Europe/Athens')
print now.astimezone(athens)

詳細については、django のドキュメントpytz のドキュメントを参照してください。

coercing to Unicode:エラーについては、これを試してください:

def __unicode__(self):
    return unicode(self.id)
于 2012-10-31T19:55:18.937 に答える