假设我有以下简化模型:
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()
如果由于某种原因先前生成的发票是错误的,则Person 可以拥有Invoice
相同的值。number
最新的(最高created_on
的)是最重要的。
要获得按姓氏.filter(id__in)
列出的结果,需要使用管理器中的技巧;person
这不能被删除。
现在我想注释number
. 即使有多个,我的尝试annotate(invoice_count=models.Count('number'))
总是会返回。1
我究竟做错了什么?关于如何正确实现这一点的任何指示,而不会过多地破解并且不会为每张发票打到数据库?