【问题标题】:Update first_date and last_date to counting customers per period更新 first_date 和 last_date 以计算每个时期的客户
【发布时间】:2017-09-24 20:42:51
【问题描述】:

在我的 django 项目中,可以使用 CustomerProfile.objects.all() 向应用程序中的每个客户显示,并使用

找到特定客户的创建日期
In [12]: cust = CustomerProfile.objects.get(pk=100)

In [13]: cust.user.date_joined
Out[13]: datetime.datetime(2017, 7, 28, 14, 43, 51, 925548)

In [14]: cust
Out[14]: <CustomerProfile: FistName LastName's customer profile>

根据创建日期,我想列出每天、每周、每月或每年创建了多少客户。结果的一个例子可能是

...
week 28 : [ 09/07/2017 - 15/07/2017 ] - Count : 201 customers
...

我可能需要一个范围start_dateend_date,我们将在其中列出此类信息。 start_date 将是创建第一个客户的日期,而创建的start_week 将是此 first_date 的那一周。显然,end_date 是最后一个客户创建的日期,last_week 是这个end_date 的星期。

例如,如果我在下拉菜单中选择Per week 并在表单中按Apply,我想将信息发送到我的模型,这样我就可以编写我解释的代码。

到目前为止,我知道如何计算两个日期范围内的客户数量:

CustomerProfile.objects.filter(user__date_joined__range=["2017-09-03", "2017-09-09"])

我怎样才能在这里更新日期,以便我们可以得到 start_week 和 end_week 之间的列表?是否存在找到first_datelast_date 的有效算法(具有良好的代码性能)?如果可能的话,将不胜感激。

【问题讨论】:

  • timedelta()怎么样?听起来与这个demo 和这个source 相似
  • 我所有的日期都是 datetime.datetime(...) 的形式。重构所有代码应该很困难。你为什么不写一个完整的答案? ;)

标签: python django


【解决方案1】:

要查找first_datelast_date,您可以使用.first().last() 对象。

first_date = User.objects.first().date_joined
last_date  = User.objects.last().date_joined

customers = CustomerProfile.objects.filter(user__date_joined__range=[first_date, last_date])
return customers.count()

【讨论】:

  • 我明白你的意思,但这不完全是我的问题,但我喜欢你的回答。
  • 我想要每个时间段(例如每周)的客户数量,那么第一个范围是 start_date=first_date 和 end_date=first_date + 7 天
  • @SancaKembang,您展示了尝试回答该问题的完整答案。到目前为止它是不完整的。如果是这样,你会得到我的投票。
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多