我们说我遵循简化模型:
class CurrentInvoices(models.Manager):
def get_queryset(self):
qs = super(CurrentInvoices, self).get_queryset()
current_invoices = qs.order_by('person', '-created_on').distinct('person').values('pk')
return qs.annotate(invoice_count=models.Count('number')).filter(id__in=current_invoices).order_by('person__last_name')
class Invoice(models.Model):
created_on = models.DateField()
person = models.ForeignKey(Person)
total_amount = models.DecimalField()
number = models.PositiveSmallIntegerField()
objects = models.Manager()
current_invoices = CurrentEDCInvoices()
如果出于某种原因,之前生成的发票错误,则人员可以Invoice
具有相同的number
。最新的一个(最高created_on
)是重要的一个。
需要管理员使用.filter(id__in)
的技巧才能获得person
姓氏列出的结果;这是无法删除的。
现在我要注释number
的总数。
我的尝试annotate(invoice_count=models.Count('number'))
总是返回1
,即使有多个。
我做错了什么?关于如何正确实现这一目标的任何指示,如果没有太多的黑客攻击和而没有针对每张发票点击数据?
答案 0 :(得分:0)
在distinct('person')
中显示您的问题,该问题会删除person
字段的重复项。
<强>更新强>
要完成任务,您应该
current_invoices = qs.order_by('person', '-created_on').distinct('person').values('number')
return qs.annotate(invoice_count=models.Count('number')).filter(number__in=current_invoices).order_by('person__last_name')