首页 > 解决方案 > 如果用户在使用 Django ORM 的日期范围内有产品,如何计算用户?

问题描述

所以假设我有这两个模型:

class User(models.Model):
    name = models.CharField()
    dob = models.DateField()


class Product(models.Model):
    user = ForeignKey(User)
    created = models.DateTimeField()
    name = models.CharField()
    amount = models.DecimalField()

用户可以创建产品,创建产品时会保存。我想问的是,是否可以统计一个时间范围内拥有产品的用户数量?

我将 GenericViewSet 用于视图并在其中创建操作以返回数据。我希望视图返回如下所示的数据:

{
    'data': [{
        'date': "2020-01-01",
        'total_users': 10
    }, {
        'date': "2020-01-02",
        'total_users': 17
    }]
}

我知道我可以使用这样的日期范围过滤产品以获取产品:

Product.objects.filter(created__range=["2020-01-01", "2020-02-01"])

但是如何计算在该范围内拥有产品的用户总数?是否可以为此做注释?在此先感谢您的帮助!

标签: djangodjango-orm

解决方案


from django.db import Count

Product.objects.filter(
    created__range=("2020-01-01", "2020-02-01")
).values(
    date=F('created')
).annotation(
    total_users=Count('user__id')
)

推荐阅读