【问题标题】:How to extract INT from Queryset如何从查询集中提取 INT
【发布时间】:2019-04-20 00:46:40
【问题描述】:

我正在尝试创建一个基于 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}

【问题讨论】:

  • {% for POs in POs %} 是错字吗?
  • 不,它是一个 for 循环,每次有对象 PO 时都会打印 ['Month', parseInt('{{POs}}')]
  • 那么目前发生了什么?您看到错误了吗?
  • 这些正在被传递:{'c': 4} {'c': 2} {'c': 1} 我想要的是大括号中的数字,因为 javascript 不读取它们作为int

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


【解决方案1】:

如果您只是在计算自己,那么您应该能够使用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 %}

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2015-01-09
    相关资源
    最近更新 更多