我有这些模特:
class Customer(models.Model):
....
class Job(models.Model):
customer = models.ForeignKey('Customer')
payment_status = models.ForeignKey('PaymentStatus')
cleaner = models.ForeignKey(settings.AUTH_USER_MODEL,...)
class PaymentStatus(models.Model):
is_owing = models.NullBooleanField()
我需要找出每个工作,父客户拥有的总工作量,但只显示属于当前用户的那些工作。查询集应该是这样的:
user = self.request.user
queryset = Job.objects.select_related('customer'
).filter(payment_status__is_owing=True).annotate(
num_owings=RawSQL('count(jobs_job.id) over (partition by customer_id)', ())
).filter(cleaner=user)
我正在使用'select_related'来显示与该职位相关的客户的字段。
首先,如果没有窗口函数/原始SQL,我还没有找到一种方法。 其次,无论我在何处放置.filter(window_cleaner = user)(在annotate()之前或之后),最终结果总是排除总计数中不属于当前用户的作业。我需要从显示中排除作业,而不是从窗口函数中的计数中排除。 我可以做整个事情作为原始SQL,但我希望有一个更好的方式在Django中做到这一点。 谢谢!
答案 0 :(得分:0)
我不知道这是否有帮助,这实际上取决于您希望如何向用户显示结果。然而,如果是我自由地设计方面,我可能会分裂我的窗口。也许父母客户的所有工作总数位于顶部,而下一个属于当前用户的工作的单独列表。然后,我将分割正常查询的数据构造,就像当前用户相关的作业一样,然后使用自定义模板标记来计算父客户的作业总数。
我使用自定义模板标签相当多。我发现它们对于我们都希望向用户显示的快速快照总数来说非常酷。例如......积累的积分总数,未完成任务的数量等等。
如果您之前没有查看过它们,请查看https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/
上的文档它们非常易于使用。