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