我目前正在研究不同产品的订户(客户)X-Y矩阵的更新。最初它是一个包含大约的矩阵。 500个客户和24个产品。为了加快渲染速度,我们实现了一些过滤方法(A-Z /商务类型过滤,有效/过期等)。
另一个要求是能够过滤掉根本没有订阅的客户,例如下表中的客户C和D.
| | subsc A | subsc B | subsc C | subsc D | subsc E |
|-----------|---------|---------|---------|---------|---------|
|customer A | valid | - | - | expired | - |
|customer B | - | ended | - | valid | - |
|customer C | - | - | - | - | - |
|customer D | - | - | - | - | - |
|customer E | expired | - | valid | - | - |
订阅表如下所示(简化):
class Subscription(models.Model):
product = models.ForeignKey(Product)
customer = models.ForeignKey(Customer)
startDate = models.DateField(default=datetime.date.today)
endDate = models.DateField()
blank=True, null=True)
ended = models.BooleanField(default=False)
是否有任何django-magic来获取没有列出订阅的客户列表?如果没有,有什么关于干净方法的建议来获得想要的结果吗?
答案 0 :(得分:1)
您可以按count
获得subscriptions
customer
,然后.filter
customers
而不subscriptions
。这样的事情可以解决问题:
unsubscribed = Customer.objects.annotate(
subscription_count=models.Count('subscription')
).filter(subscription_count=0)
另一种方式(应该更快)是使用__isnull
符号来反对FK
的反向关系。方法如下:
unsubscribed = Customer.objects.filter(subscription__isnull=True)