Lors de l'enregistrement de l'horodatage dans DateTimeField de Django en utilisant auto_now_add de cette façon:

creation_timestamp = models.DateTimeField(auto_now_add=True)

Le champ est enregistré en millisecondes:

2018-11-20T15:58:44.767594-06:00

Je veux formater ceci pour qu'il s'affiche sans millisecondes:

2018-11-20T15:58:44-06:00

Mais la seule option que j'ai pu trouver ne montre pas exactement ce dont j'ai besoin:

format="%Y.%m.%dT%H:%M:%S%z" me donne 2018.11.20T15:58:44-0600 Comment formater ce champ comme je le souhaite?

Sinon, je préfère enregistrer DateTimeField sans millisecondes mais auto_now_add permet-il de faire ce genre de choses?

0
Stan Redoute 21 nov. 2018 à 01:17

3 réponses

Meilleure réponse

Vous pouvez remplacer la méthode DateTimeField de DateTimeField et y ajouter les modifications. Par exemple:

class CustomDateTimeField(models.DateTimeField):
    def value_to_string(self, obj):
        val = self.value_from_object(obj)
        if val:
            val.replace(microsecond=0)
            return val.isoformat()
        return ''

Et utilisez-le dans le modèle:

 created = CustomDateTimeField(auto_now_add=True)
1
ruddra 21 nov. 2018 à 04:11

Si vous souhaitez le formater lors de son affichage, vous pouvez utiliser: creation_timestamp.strftime("%Y-%m-%d%H:%M:%S")

Vous pouvez également faire DateTimeField pour l'enregistrer dans ce format, mais cela demanderait un ensemble de modifications qui s'appliqueront à l'échelle du système:

Dans votre fichier de paramètres, définissez les éléments suivants:

  1. DATETIME_FORMAT="%Y-%m-%d%H:%M:%S"
  2. L10N=False pour rendre les données de localisation douloureuses n'a pas de précédent en ce qui concerne le format des dates.
  3. USE_TZ=False

Mais considérez le fait que ces modifications s'appliqueront par défaut à tous les objets de date et heure de votre projet.

0
Alex 20 nov. 2018 à 22:28

Je pense que vous devrez utiliser l'isoformat. Regardez cette réponse:

Afficher le caractère: dans le décalage du fuseau horaire à l'aide de datetime.strftime

0
Tiago Gomes 20 nov. 2018 à 22:39