2015-05-18 2 views
0

Учитывая следующую Django модель:Как получить результат от Model.objects.create и Model.objects.get в Django?

from django.db import models 

class SomeModel(models.Model): 
    date = models.DateField() 

При создании объекта с помощью следующего кода, типа поля даты Юникод

obj = SomeModel.objects.create(date=u'2015-05-18') 

Но когда я получаю один и тот же объект из базы данных, введите даты поле будет datetime.date

obj = SomeModel.objects.get(pk=obj.pk) 

Я знаю, Django преобразует u'2015-05-18' в datetime.date объект автоматически, но почему он возвращает исходную строку unicode с Model.objects.create()? есть ли способ всегда получать datetime.date из Model.objects.create() и Model.objects.get()?

+1

Зачем вам это нужно? Если вы всегда хотите получить строку, почему бы не использовать charfield, а не дату? –

+0

Я хочу ввести u'2015-05-18 ', который является частью URL-адреса, и я хочу получить datetime.date –

ответ

1

Просто передать объект типа DateTime к методу создания:

from datetime import date 
obj = SomeModel.objects.create(date=date(2015, 5, 18)) 

или

obj = SomeModel.objects.create(date=date.strftime('2015-05-18', '%y-%m-%d'))  
0

Есть два способа Django преобразует данные в модели. Во-первых, при сохранении модели данные преобразуются в правильный тип данных и отправляются на сервер. Данные по самой модели не изменен. Во-вторых, когда данные загружаются из базы данных, они преобразуются в тип данных, который, по мнению Джанго, является наиболее подходящим.

Это по дизайну: Django не хочет делать какие-либо магии на самих моделях. Модели - это просто экземпляры класса python с атрибутами, поэтому вы можете делать все, что захотите. Это включает в себя использование строки u'2015-05-18' в качестве date или строки 'False' для хранения как True (да, это верно).

База данных не может хранить даты как произвольные типы данных, поэтому в базе данных это всего лишь эквивалент объекта Python date. Информация о том, что она была строкой, теряется, а при загрузке данных непосредственно из базы данных get() данные последовательно преобразуются в наиболее подходящий тип данных Python, date.

Смежные вопросы