Selesai: django anotasi medan datetime kepada char

Masalah utama ialah django menganotasi medan datetime kepada char tidak akan berfungsi dengan medan datetime tertentu. Sebagai contoh, jika anda mempunyai medan yang dipanggil "created_at" dan anda cuba menganotasinya dengan kelas CharField, django tidak akan membenarkan anda menyimpan data anda.

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

Django menyediakan jenis datetime yang mudah yang boleh digunakan untuk mewakili tarikh dan masa.

Untuk mencipta objek datetime, gunakan pembina datetime:

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

Contoh kod datetime

Berikut ialah senarai contoh kod datetime dalam Django.

daripada django.utils.datetime import datetime daripada django.utils.translation import gettext_lazy sebagai _ daripada django.core.urlresolvers import terbalik daripada kelas model import django.db Pengguna(model.Model): first_name = models.CharField(max_length=30, blank=Benar, nullable=False) last_name = models.CharField(max_length=30, blank=True, nullable=False) e-mel = models.EmailField() def __str__(self): return self._first_name + ' ' + self._last_name + '@' + diri._e-mel

Related posts:

Tinggalkan komen