Выбор нескольких строк из базы данных в views.py и отправка их в виде массива на html-страницу - Django

Я хочу выбрать несколько строк в базе данных в представлении 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']]
Вернуться на верх