【问题标题】:Django queryset with extra filter带有额外过滤器的 Django 查询集
【发布时间】:2015-08-24 20:17:55
【问题描述】:

我的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=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')

我收到错误消息,指出“函数对象没有额外属性”。 我做错了什么?

【问题讨论】:

    标签: python django views django-queryset


    【解决方案1】:

    你的超级函数调用有错字(你没有调用它)

    qs = super(PrescriptionTrendListView,self).get_queryset().extra(select={'month': truncate_date})
    

    【讨论】:

    • aaaargh...我会花几个小时打破我的脑袋才能弄清楚..谢谢你注意到..
    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 2015-04-03
    • 2012-07-05
    • 1970-01-01
    • 2019-03-15
    • 2016-04-11
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多