Résolu: django annote le champ datetime en char

Le principal problème est que django annotate datetime field to char ne fonctionnera pas avec certains champs datetime. Par exemple, si vous avez un champ appelé "created_at" et que vous essayez de l'annoter avec la classe CharField, Django ne vous permettra pas d'enregistrer vos données.

field

I have a model with a datetime field and I want to annotate it to a charfield. I tried this:
<code>MyModel.objects.values('date').annotate(date_char=CharField())
</code>
but it gives me an error: <code>Cannot resolve keyword 'CharField' into field.</code>


A:

You can use <code>Func</code>:  https://docs.djangoproject.com/en/dev/ref/models/expressions/#func-expressions  and then use the <code>.format()</code> method on the resulting string to format it however you want (e.g., YYYY-MM-DD):   https://docs.python.org/2/library/string.html#formatstrings  .  Something like this should work:  
<code>from django.db import models     # for Func expression class   
from django import db           # for connection alias, used in Func expression class   

                                # create connection alias, used in Func expression class   

                                # (this is only necessary if you are using multiple databases)   

                                # replace 'default' with your database name if using multiple databases   

my_conn = db._connections['default']    

                                # create Func expression object that will convert date to string format YYYY-MM-DD    

my_func = models.Func(my_conn, function='TO_CHAR', template='%(function)s(%(expressions)s::DATE, 'YYYY-MM-DD')')    

                                # use my_func in query as follows:    

MyModelObjects = MyModelObjects .objects .values('date') .annotate(date_char=my_func)     
</code>

Date et heure en Django

Django fournit un type datetime pratique qui peut être utilisé pour représenter les dates et les heures.

Pour créer un objet datetime, utilisez le constructeur datetime :

>>> depuis django.utils.datetime import datetime >>> d = datetime(2015, 11, 25) >>> d 2015-11-25 00:00:00

Exemples de code datetime

Voici une liste d'exemples de code datetime dans Django.

depuis django.utils.datetime importer datetime depuis django.utils.translation importer gettext_lazy as _ depuis django.core.urlresolvers importer inverse depuis django.db importer la classe de modèles User(models.Model): first_name = models.CharField(max_length=30, blank=True, nullable=False) last_name = models.CharField(max_length=30, blank=True, nullable=False) email = models.EmailField() def __str__(self): return self._first_name + ' ' + self._last_name + '@' + soi._email

Articles connexes

Laisser un commentaire