1
模型,用抽象基類:Django的合計值
class MapObject(models.Model):
start_date = models.DateTimeField(default= datetime.strptime('1940-09-01T00:00:00', '%Y-%m-%dT%H:%M:%S'))
end_date = models.DateTimeField(default= datetime.strptime('1941-07-01T00:00:00', '%Y-%m-%dT%H:%M:%S'))
description = models.TextField(blank=True)
location = models.PointField()
objects = models.GeoManager()
user = models.ForeignKey(User)
created = models.DateTimeField(auto_now_add = True)
last_modified = models.DateTimeField(auto_now = True)
source = models.ForeignKey(Source)
address= models.TextField(blank=True, null=True)
address_road = models.TextField(blank=True, null=True)
class Meta:
abstract = True
class Bomb(MapObject, BombExtraManager):
#Bomb Attributes
type = models.CharField(choices= Type_CHOICES, max_length=10)
night_bombing = models.BooleanField(blank=True)
map_sheet = models.ForeignKey(MapSheet, blank=True, null=True)
def __unicode__(self):
return self.type
現在,我想使用Django ORM作爲此查詢的結果相當於:
Select date_part('day',"start_date") as "day", date_part('hour',"start_date") as "hour", Count('id')
from "Mapper_bomb"
where "source_id" = 1
group by date_part('hour',"start_date"), date_part('day',"start_date")
Order by date_part('day',"start_date") ASC, date_part('hour',"start_date") ASC
這將使我一張桌子上有每天和每小時的炸彈數量。
使用Django ORM,我來的那一刻以下(FIRST_DAY就是我定義的自定義管理器,返回數據的一個子集,同SOURCE_ID = 1):
Bomb.first_day.extra(select={'date': "date_part(\'day\', \"start_date\")", 'hour': "date_part(\'hour\', \"start_date\")"}).values('date', 'hour').order_by().annotate(Count('date'), Count('hour'))
不過在Django抱怨FieldError:無法將關鍵字'日期'解析爲字段。有沒有一種方法使用Django ORM來獲得所需的結果,還是我需要回退原始SQL?
哇,那有效,太好了!儘管如此,從Django文檔我收集你需要設置額外的字段爲選擇= ...,你還沒有在這裏做?不知道這是什麼意思... – petzlux
第一個參數是'select',無論你是否命名。 –
這在Django 1.5中不起作用。它是從哪裏加入的? 'User.objects.extra({'started':'1'})。values('started')。order_by('started')。annotate(Count('started'))'給出'FieldError:無法解析關鍵字'開始「進場」 – qris