Datatyperna för postgres i Django mappar till strängen literal timestamp with time zone
, och det verkar inte finnas något alternativ att ändra den typen.
Så vitt jag vet har du tre alternativ:
-
Dra nytta av Djangos hook för att köra raw sql efter skapa tabellsatsen . För att göra detta skapa en katalog som heter
sql
i din app och en fil i den katalogen som hetermymodel.postgres_psycopg2.sql
. Placera dina ändringstabellsatser där. -
Skriv ett anpassat fält för att definiera modifierarna för tidsstämpelfältet som du tycker är lämpligt. Se "skriva anpassade modellfält ".
-
Lämna django-fältet som det är och utför tidszonsomvandlingen i din applikation så att du är helt säker på att du passerar rätt tid.
Min personliga preferens för dataintegritet är #3. Precis som med teckenkodningar, där du alltid vill vara säker på att du känner till teckenuppsättningen och hanterar konverteringar på rätt sätt, känner jag mig mycket mer bekväm med datum/tider vars attribut (inklusive TZ) är så exakt definierade som de kan bli. Du kan vara säker idag på att all din input kommer till din app redan i UTC, men det kan ändras, särskilt om tidsstämplarna tillhandahålls av slutanvändare. För vad det är värt skulle jag gå den extra milen, konvertera tidsstämpeln i appen till UTC och lagra den i DB med UTC som tidszon.