我想在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']]