Python 带有额外过滤器的Django queryset
我的models.py如下所示:Python 带有额外过滤器的Django queryset,python,django,views,django-queryset,Python,Django,Views,Django Queryset,我的models.py如下所示: class Prescription(models.Model): date_prescribed = models.DateTimeField() doctor = models.ForeignKey(Doctor) pharmacy = models.ForeignKey(Pharmacy) class Doctor(models.Model): name = models.CharField(max_length=15
class Prescription(models.Model):
date_prescribed = models.DateTimeField()
doctor = models.ForeignKey(Doctor)
pharmacy = models.ForeignKey(Pharmacy)
class Doctor(models.Model):
name = models.CharField(max_length=150)
age = models.PositiveSmallIntegerField()
class Pharmacy(models.Model):
name = models.CharField(max_length=150)
status = models.CharField()
现在,我需要查找六个月内按月份分组的所有处方,以今天的月份作为六个月前的起始月份。我尝试在shell上玩了一些游戏,并使此查询正常工作:
end_date = timezone.now()
start_date = end_date - relativedelta(months=6)
qs = (Prescription.objects.extra(select={'month': connection.ops.date_trunc_sql('month', 'date_prescribed')})
.filter(date_prescribed__range=(start_date,end_date))
.annotate(Count('id'))
.order_by('month'))
但是,在视图中使用相同的方法时不起作用:
class PrescriptionTrendListView(generics.ListAPIView):
queryset = Prescription.objects.all()
serializer_class = LineGraphSerializer
def get_queryset(self):
end_date = timezone.now()
start_date = end_date - relativedelta(months=6)
truncate_date = connection.ops.date_trunc_sql('month', 'date_prescribed')
qs = super(PrescriptionTrendListView,self).get_queryset.extra(select={'month': truncate_date})
return qs.filter(date_prescribed__range=(start_date, end_date)).annotate(pk_count=Count('pk')).order_by('month')
我得到一个错误,指出“函数对象没有额外属性”。
我做错了什么?您的超级函数调用有输入错误(您没有调用它)
啊…我会花几个小时来打破我的脑袋来弄清楚的…谢谢你注意到了。。
qs = super(PrescriptionTrendListView,self).get_queryset().extra(select={'month': truncate_date})