django - 从 dict 按名称访问对象
问题描述
用户可以有多个列表,我将 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')
解决方案
因为您的图表需要整数数据,所以简单的解决方案是向您的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 %}
推荐阅读
- php - 格式化 MySQL 行中的数据以供下载
- c++ - 内存泄漏检测器如何区分应用程序调用的 malloc 和第三方 malloc 调用?
- node.js - 如何在节点js的预签名url请求中发送内容md5标头
- jenkins - 从单个报告名称下的多个文件夹发布 Html 报告 - Jenkins,HTML Publisher
- swift - 如何在没有按钮的情况下自动在 SwiftUI 中呈现模态
- wso2 - WSO2 IS 5.10 SAML2 工具包丢失
- typescript - Distribute a generic type over a union
- regex - 你能看看这些正则表达式并解释它们的输出吗
- javascript - setInterval() 在为嵌套时间函数设置后移动得非常快
- python - Telethon sign_up 方法始终返回 PhoneCodeInvalidError