2012-04-06 6 views
7

mit Django 1.4 Ich habe ein Modell mit einem Datetimefield. Ich habe django.utils.timezone importiert, um sie als Standardwert zu verwenden.django.utils.timezone gibt naives Datum zurück?

aber ich bekomme immer noch die Warnung über DateTimeField erhielt naive Datum. ich habe USE_TZ auf true gesetzt, so dass es bewusst Datetimes

Antwort

2

Djangos setzen einen Standarddatumswert, der nicht bewusst ist, da das Feld standardmäßig nicht nullbar ist. null auf true gesetzt wird, bedeutet es gesetzt wird nur das Datum stattdessen auf NULL, so erhöht die Warnung ist nicht:

date = models.DateTimeField(default=timezone.now, null=True) 
+2

Ich bin vielleicht ignorant, aber ich verstehe nicht, was Null hat zu tun mit timezone.now() ist naiv. Wenn Null = True als .now() gibt ein bewusstes Objekt zurück? – AllTradesJack

+0

Der Standardwert, den django eingab, war nicht in der Zeitzone. – mobiletim

+0

@mobiletim Ich bin immer noch ein wenig verwirrt, warum würde die Einstellung "null = True" den Fehler verschwinden lassen? –

-1

Ich weiß, das ist das Problem Seite-Treten aber haben Sie versucht auto_now_add=True stattdessen auf Ihrem Gebiet? Keine Notwendigkeit, default für das zu verwenden, was Sie wünschen.

Auf der anderen Seite sollte Ihre Version auch funktionieren, wenn Sie tatsächlich USE_TZ=True haben.

Ich würde sagen, es funktioniert, und Sie erhalten die RunTimeWarning von irgendwo, wo Sie das date Feld direkt statt und nicht aus dem Standard. Versuchen Sie einzugrenzen, wann die Warnung genauer ausgelöst wird.

+0

auto_now_add ist ein schlechter Stil für zeitzonenbewusste Django-Anwendungen – fangsterr

+0

@fangsterr Darf ich fragen, warum denkst du das? Es wäre nützlicher, wenn Sie auch Ihre Argumentation erklären würden. –

+0

siehe http://stackoverflow.com/questions/10195020/why-django-lint-tells-me-the-auto-now-add-is-reprecated – fangsterr

0

In meinem Fall habe ich immer das Problem empfangen, wenn ich Tests lief. Dies liegt an einer früheren Migration, die datetime anstelle von timezone falsch verwendet hat. Ich kehrte zu der Migration zurück, bevor die Warnung ausgelöst wurde, löschte sie und führte Makemigrationen erneut aus. Das hat das Problem für mich gelöst.

Verwandte Themen