Python Django-Zip包含不常见字段数据的多个查询集
我有一个模型,其中我每月获取Python Django-Zip包含不常见字段数据的多个查询集,python,django,django-queryset,Python,Django,Django Queryset,我有一个模型,其中我每月获取发布计数,进程计数下,拒绝计数,接收计数 class PreData(models.Model): status=models.CharField(max_length=200,default=None,null=True) receivedon=models.DateField(default=None,blank=False,null=True) publishedon = models.DateField(default=None,
发布计数
,进程计数下
,拒绝计数
,接收计数
class PreData(models.Model):
status=models.CharField(max_length=200,default=None,null=True)
receivedon=models.DateField(default=None,blank=False,null=True)
publishedon = models.DateField(default=None, blank=True, null=True)
接收计数
基于模型中接收日期字段
的月度计数,发布计数
基于模型中发布日期字段
的月度计数,拒绝计数
和过程计数下的基于模型中CharField
的特定状态
值的计数
在写了下面的查询之后,我很挣扎,我不知道如何获取数据来填充列(见图)。我不确定我写的查询是否有用
当我想压缩收到的每月数据
和发布的每月数据
但收到的每月数据
有4月份的数据,而发布的每月数据
没有4月份的数据时,问题就来了。当我打开拉链时,结果将在四月份公布。我不知道该怎么做
received_monthly_data = PreData.objects.filter(journaluser=request.user.username).\
annotate(month=TruncMonth('receivedon'),year=TruncYear('receivedon')).values('month','year').\
annotate(c=Count('id')).order_by('-month')
published_monthly_data = PreData.objects.filter(Q(journaluser=request.user.username)&~Q(pdfsenton=None)). \
annotate(month=TruncMonth('publishedon'), year=TruncYear('publishedon')).values('month', 'year'). \
annotate(c=Count('id')).order_by('-month')
underproc_data= PreData.objects.filter(Q(journaluser=request.user.username)&~Q(status="[Published]"))
非常感谢您的帮助。也许您可以使用itertools.zip\u longest
,它将压缩最长的序列,并用较短序列中缺少的值替换None
。这样你就不会丢失4月份的数据
如果希望使用非None
的值,请指定fillvalue
参数
从
itertools.zip_longest(*iterables,fillvalue=None)
制作一个迭代器,聚合来自每个ITerable的元素。如果iterables的长度不均匀,则缺少值
用fillvalue填充。迭代一直持续到最长时间
我累坏了
请注意,该函数在Python2中被称为itertools.izip\u longest
。这很有效!非常感谢@Will Keeling。如何访问django模板中的fillvalue
arguments值?最好在视图中执行压缩,然后再将结果数据列表交给模板。这样你就不必在模板本身中处理fillvalue
。是的,我用同样的方法做了,但是我无法解决我的问题,因为在模板中压缩和迭代会在模板中进行大量for循环迭代,还有其他问题。所以我想知道我是否可以编写自己的字典,通过在view-it-self中迭代for-loop大约100次来填充我想要的字段?这会好吗?是的,这听起来是个合理的方法。通过预处理视图中的数据来保持模板中的逻辑简单始终是一个好主意。