如何从查询集中提取INT

时间:2018-11-16 19:50:23

标签: django django-queryset django-aggregation django-annotate

我正在尝试创建一个基于PO的日期和数量动态更新的图形。

模型

class JobOrder(models.Model):
    status = models.CharField('status', choices=STATUS, max_length=200, default="Waiting")
    job_order = models.IntegerField(primary_key=True)
    remarks = models.CharField(max_length=45, blank=True, null=True)
    rush_order = models.IntegerField()
    date_issued = models.DateField('date_issued', auto_now_add=True)
    date_required = models.DateField()
    client = models.ForeignKey(Client, on_delete= models.CASCADE)
    total_amount = models.FloatField()

从视图中查询:

POs = JobOrder.objects.values('date_issued__year', 'date_issued__month').annotate(c=Count('id')).values('c')

通过HTML的javascript代码进行传递:

function salesComparisonChart() {
    var POComparisson = google.visualization.arrayToDataTable([
        ['Month', 'Count'],
        {% for POs in POs %}
            ['Month', parseInt('{{POs}}')],
        {% endfor %}
    ]);

使用我当前的代码,正在传递的数据如下所示:

{'c': 4}
{'c': 2}
{'c': 1}

1 个答案:

答案 0 :(得分:0)

如果您只是在数数本身,那么您应该可以使用values_list来检索它们的简单列表:

POs = JobOrder.objects.values(
    'date_issued__year', 'date_issued__month'
).annotate(c=Count('id')).values_list('c', flat=True)  # Retrieve a flat list

然后,您可以在模板中删除parseInt,也许还可以将循环变量重命名为PO,以减少名称的混乱:

{% for PO in POs %}
    ['Month', {{ PO }}],
{% endfor %}