Solved: django annotate datetime field sa char

Ang pangunahing problema ay ang django annotate datetime field sa char ay hindi gagana sa ilang datetime field. Halimbawa, kung mayroon kang field na tinatawag na "created_at" at susubukan mong i-annotate ito sa klase ng CharField, hindi ka papayagan ng django na i-save ang iyong data.

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 sa Django

Nagbibigay ang Django ng isang maginhawang uri ng datetime na maaaring gamitin upang kumatawan sa mga petsa at oras.

Para gumawa ng datetime object, gamitin ang datetime constructor:

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

Mga halimbawa ng datetime code

Ang sumusunod ay isang listahan ng halimbawa ng datetime code sa Django.

mula sa django.utils.datetime import datetime mula sa django.utils.translation import gettext_lazy bilang _ mula sa django.core.urlresolvers import reverse mula sa django.db import models class 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 + '@' + sarili._email

Kaugnay na mga post:

Mag-iwan ng komento