我有一个像这样定义的查询
SELECT DISTINCT substring(date::text from 1 for 8)||'000' AS date FROM my_table;
如何将其转换为Django模型?
date
就像这样20150403000
该查询应该返回20150403
而不会跟踪000
我现在拥有的是这样的:
query.distinct('date')
EDITED
好的问题很模糊。我再次重新定义了我的问题,因为即使psql也不能做我想要的东西(在这里丢失了)。 LOL
select to_date(CAST(date as TEXT), 'YYYYMMDD') from my_table
Where to_date(CAST(date as TEXT), 'YYYYMMDD')<=DATE '20141127' ;
日期属于bigint类型。 django模型orm可以处理这个吗?
答案 0 :(得分:0)
您可以使用Django模型&#39; to_python
。
Converts a value as returned by your database (or a serializer) to a Python object.
例如:
class CustomDateTimeField(models.DateTimeField):
def to_python(self, value):
if isinstance(value, DateTimeField):
return value.rstrip("0")
然后,您需要使用为您的模型归档的自定义日期时间。
说my_date = CustomDateTimeField()
还有,get_prep_value
,此方法用于将Python对象转换为查询值。
<强>更新强>: 对于带过滤器的查询,它会尝试实现loopkup,因此您应该使用get_prep_lookup来处理loopkup
这样的事情:
def get_db_prep_value(self, value, *args, **kwargs):
if value is not None:
return datetime.datetime.strptime(value[0:4] + "-" + value[4:6] + "-" + value[6:], "%Y-%m%d")
def get_prep_lookup(self, lookup_type, value):
return self.get_db_prep_value(value)
示例示例:
from django.db import models
import datetime
# Create your models here.
class CustomDateTimeField(models.Field):
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
return 'datetime'
def to_python(self, value):
if not value is None:
if isinstance(value, datetime.datetime):
return value.strftime("%Y-%m-%d")
else:
return value.rstrip("0")
def get_db_prep_value(self, value, *args, **kwargs):
if value is not None:
return datetime.datetime.strptime(value[0:4] + "-" + value[4:6] + "-" + value[6:], '%Y-%m-%d')
return None
def get_prep_lookup(self, lookup_type, value):
return self.get_db_prep_value(value.rstrip("0"))
class Person(models.Model):
name = models.CharField(max_length=25)
my_date = CustomDateTimeField()