用户可以有多个列表,并且我有连接到列表的DataItem对象,这些DataItem对象具有数字值,现在我需要按列表名称检索所有值并将其插入chart.js我的视图看起来像这样:
@login_required
def app(request):
form = list_form
form2 = data_form(user=request.user)
user = request.user.pk
user_lists = List.objects.filter(user=user)
#Here I have lists in dict but I have no idea how to call them in template.
list_data = {}
for list in user_lists:
list_data[list.name] = DataItem.objects.filter(list=list)
context = {'user_lists': user_lists, 'form': form, 'form2': form2,
'list_data': list_data}
return render(request, 'app/app.html', context)
模板:这是html页面中的chart.js数据集部分,它正确显示了列表名称,如何调用与这些名称相关的值?
{% for list in user_lists %}
{
label: '{{ list.name }}',
data: [?????????],
},
{% endfor %}
模型(如果需要)
class List(models.Model):
name = models.CharField(max_length=100, default="")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='lists')
def __str__(self):
return self.name
class Meta:
unique_together = ['name', 'user']
@property
def chart_data(self):
return ', '.join([str(x.data) for x in self.data_items])
class DataItem(models.Model):
data = models.IntegerField(default=0)
list = models.ForeignKey(List, on_delete=models.CASCADE, related_name='data_items')
答案 0 :(得分:0)
由于图表需要整数数据,因此简单的解决方案是为List
模型添加属性:
class List(models.Model):
name = models.CharField(max_length=100, default="")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='lists')
@property
def chart_data(self):
return ', '.join([str(x.data) for x in self.data_items.all()])
并在模板中:
{% for list in user_lists %}
{
label: '{{ list.name }}',
data: [{{ list.chart_data }}],
},
{% endfor %}
答案 1 :(得分:0)
您可以只循环list_data一个字典对象。
DataItem.objects.filter(list=list)
必须返回列表项而不是查询项。
因此,尝试获取所需的值列表。例如
DataItem.objects.filter(list=list).values_list('data',flat=True)
list_data包含标签名称和数据。
key
为label
,value
为data
因为您拥有关键和价值。您不需要循环user_lists
{% for key, value in list_data.items %}
{
label: '{{key}}',
data: '{{value}}',
}
{% endfor %}