如果用户出现多次,则django会将用户排除在queryset之外

时间:2011-08-05 13:34:14

标签: django django-models django-views django-queryset

我有一个记录集可以捕获大量数据,即有人购买了多少次数据。

我正在开发一个基于之前购买的小型通知系统,如果他们购买了特定类别的商品,就会向他们发送电子邮件。

可能是这个用户在该记录集中不止一次出现,我想做的最后一件事就是在一天内向他们发送50或60封电子邮件来惹恼他人。

有没有办法可以循环访问数据,每个类别只能获得一个用户?

这就是我所拥有的

class Customer(models.Model):
    user = models.ForeignKey(User)
    product = models.ForeignKey(Product)
    amount = models.PositiveIntegerField()
    date_backed = models.DateTimeField(auto_now=True)
    paypal_transaction_id = models.CharField(max_length=50)
    message = models.CharField(max_length=255, blank=True, null=True)

class Product(models.Model):
    title = models.CharField(max_length=50)
    ....
    ....
    ....

以下是我正在运行的内容

customers = Customer.objects.annotate(Count('user__id')).order_by()

结果:

[<Customer: user1>, <Customer: user2>, <Customer: user1>, <Customer: user1>, <Customer: user1>, <Customer: john>, <Customer: user1>]

2 个答案:

答案 0 :(得分:0)

使用.distinct()方法。它将阻止数据重复,因此所有用户在查询集中只会出现一次。

customers = Customer.objects.annotate(Count('user__id')).order_by().distinct()

答案 1 :(得分:0)

尝试使用distinct:

customers = Customer.objects.annotate(Count('user__id')).distinct()