Rezolvat: django adnotă câmpul datetime în char

Problema principală este că django annotate câmpul datetime în char nu va funcționa cu anumite câmpuri datetime. De exemplu, dacă aveți un câmp numit „created_at” și încercați să îl adnotați cu clasa CharField, django nu vă va permite să vă salvați datele.

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>

Datetime în Django

Django oferă un tip convenabil de date și oră care poate fi utilizat pentru a reprezenta datele și orele.

Pentru a crea un obiect datetime, utilizați constructorul datetime:

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

Exemple de cod date și oră

Următoarea este o listă de exemplu de cod datetime în Django.

din django.utils.datetime import datetime din django.utils.translation import gettext_lazy ca _ din django.core.urlresolvers import invers din django.db import modele clasa Utilizator(models.Model): first_name = models.CharField(max_length=30, blank=Adevărat, nullable=Fals) last_name = modele.CharField(max_length=30, blank=True, nullable=False) email = modele.EmailField() def __str__(self): return self._first_name + ' ' + self._last_name + „@” + self._email

Postări asemănatoare:

Lăsați un comentariu