在views.py中从数据库中选择多行,并将其作为数组发送到html页面



我想在Django视图中选择数据库中的多行,并将其作为数组发送到我的html页面。

views.py

def report_template(request, pk):
template_list = AddScore.objects.filter(template_name=pk)
context = {'Template': template_list}
return render(request, 'myapp/report_template.html', context)

models.py

class AddScore(models.Model):
score = models.CharField(max_length=100, primary_key=True, default='', blank=True)
client_name = models.CharField(max_length=300, blank=True)
template_name = models.CharField(max_length=100, blank=True)

我想要的结果是

data = [
['client_name1', '37.54'],
['client_name2', '33.54']
]

QuerySet.values_list()正是您所需要的。

假设我们有3条记录

>>> for obj in AddScore.objects.all():
...     print(obj.__dict__)
... 
{'score': '37.54', 'client_name': 'client_name1', 'template_name': 'some_template1'}
{'score': '33.54', 'client_name': 'client_name2', 'template_name': 'some_template1'}
{'score': '35.53', 'client_name': 'client_name3', 'template_name': 'some_template2'}

我们正在寻找这个模板

>>> pk = 'some_template1'

使用values_list()获得包含所有字段的QuerySet

>>> AddScore.objects.filter(template_name=pk).values_list()
<QuerySet [('37.54', 'client_name1', 'some_template1'), ('33.54', 'client_name2', 'some_template1')]>

使用values_list(*fields)使QuerySet只包含目标字段

>>> AddScore.objects.filter(template_name=pk).values_list('client_name', 'score')
<QuerySet [('client_name1', '37.54'), ('client_name2', '33.54')]>

如果您需要的是list对象而不是QuerySet对象,只需将其转换为list

>>> qs = AddScore.objects.filter(template_name=pk).values_list('client_name', 'score')
>>> 
>>> list(qs)  # list of tuples
[('client_name1', '37.54'), ('client_name2', '33.54')]
>>> 
>>> list(map(list, qs))  # list of lists
[['client_name1', '37.54'], ['client_name2', '33.54']]

最新更新