Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-Zip包含不常见字段数据的多个查询集_Python_Django_Django Queryset - Fatal编程技术网

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次来填充我想要的字段?这会好吗?是的,这听起来是个合理的方法。通过预处理视图中的数据来保持模板中的逻辑简单始终是一个好主意。