Django -如何添加到Django查询集(values)

kzmpq1sx  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(125)

如何将字典追加到Django查询集中?我已经在queryset上使用了.values,但它仍然分类为queryset,当我尝试在它上使用.append时,出现了这个错误

AttributeError: 'QuerySet' object has no attribute 'append'

字符串
下面是我的代码:(start和end是传入的变量,用于表示所选范围的开始月份和结束月份)

qs = CustomerInformation.objects.filter(salesDepartment__in=[d]).filter(created_date__range=(start,end))
qs = qs.annotate(date=TruncMonth('created_date')).values('date').annotate(lead_count=Count('status',filter=Q(status="lead"))).annotate(client_count=Count('status',filter=Q(status="client")))
qs = qs.values('date', 'client_count', 'lead_count')


我想做的就是将缺少的日期添加到查询集,例如如果我的查询集有日期:2020年4月和2020年6月,但由于CustomerInformation没有任何在2020年5月范围内的created_date示例,因此我希望能够插入一个带有date的字典:2020年5月,lead_count和client_count为0,以便我的数据可视化工作正常
谢谢大家,感谢所有的帮助!

qxgroojn

qxgroojn1#

你不能追加到qs,除非你正在向数据库中添加数据。如果你愿意,你可以转换成一个列表,然后添加项目。
您可以创建一个生成器,在需要的地方输出其他值。
例如:

def getDatat():
    qs = CustomerInformation.objects.filter(salesDepartment__in=[d]).filter(created_date__range=(start,end))
    qs = qs.annotate(date=TruncMonth('created_date')).values('date').annotate(lead_count=Count('status',filter=Q(status="lead"))).annotate(client_count=Count('status',filter=Q(status="client")))
    qs = qs.values('date', 'client_count', 'lead_count')
    this_v = None
    for next_v in qs:
         if this_v is None:
            this_v = next_v
            yield this_v
            continue
         # Do logic for checking if there's any needed extra values between this_v and next_V
         # yield extra values
         this_v = next_v
         yield this_v

字符串

相关问题