【问题标题】:Django - How to append to a Django queryset (values)Django - 如何附加到 Django 查询集(值)
【发布时间】:2020-09-28 09:02:18
【问题描述】:

如何将字典附加到 Django 查询集中?我已经在查询集上做了 .values ,但它仍然归类为查询集,当我尝试在其上使用 .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 没有任何实例的 created_date 范围为2020 年 5 月,因此我希望能够插入一个日期为 May 2020 和lead_count 和 client_count 0 的字典,以便我的数据可视化能够正常工作

谢谢大家,感谢所有帮助!

【问题讨论】:

  • 将其转换为列表:list(qs)。但是我不建议你这样做,因为items的查询集类型不是dict,所以后面一定要进行类型检查。
  • 我记得我之前看过你的问题,所以你可以考虑:构造一个类似于list的新类型,它是可迭代的,然后将查询结果填充到其中,然后直接使用这个新类型而不是queryset .
  • @YangHG 您所说的项目类型查询集是什么意思?
  • 我现在正在做的是使用列表理解将其转换为列表,这行得通吗?

标签: python django


【解决方案1】:

您不能追加到 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多