Доступ к значениям в массиве JSON и последующее присвоение его текстовому полю
Мой вопрос очень прост. Используя DjangoJSONEncoder, я могу отправить JSON массив экземпляров Model с полями, product_number
(pk) и amount
в качестве контекста в HTML файл. Затем я получаю доступ к массиву JSON obj с помощью некоторого кода javascript.
Код JS:
{{ data|json_script:"hello-data" }}
<script type="text/javascript">
const data = JSON.parse(document.getElementById('hello-data').textContent);
document.getElementById('id_line_one').onchange = function(event){
alert(data);
document.getElementById('id_line_one_unit_price').value = data[event.target.value].fields.amount
};
</script>
Массив:
[[1, 56000], [2, 55000]]
Я думаю, что это строка, а не массив?
У меня есть выпадающее поле, и когда пользователь выбирает название из выпадающего меню, оно возвращает первичный ключ этого title
, а затем, используя его, я хочу получить сумму этого product
из массива JSON и затем установить значение текстового поля с этой суммой.
views.py:
def add_invoice(request):
form = InvoiceForm(request.POST or None)
total_invoices = Invoice.objects.count()
queryset = Invoice.objects.order_by('-invoice_date')[:6]
dataa = Inventory.objects.values_list('product_number','amount')
data = json.dumps(list(dataa), cls=DjangoJSONEncoder)
if form.is_valid():
form.save()
messages.success(request, 'Successfully Saved')
return redirect('/invoice/list_invoice')
context = {
"form": form,
"title": "New Invoice",
"total_invoices": total_invoices,
"queryset": queryset,
"data": data,
}
return render(request, "entry.html", context)
models.py:
from django.db import models
class Inventory(models.Model):
product_number = models.IntegerField(primary_key=True)
product = models.TextField(max_length=3000, default='', blank=True, null=True)
title = models.CharField('Title', max_length=120, default='', blank=True, unique=True)
amount = models.IntegerField('Unit Price', default=0, blank=True, null=True)
def __str__(self):
return self.title
Я заметил, что код javascript на самом деле работает правильно, Он отправляет i
-й элемент, т.е. если выбранный заголовок имеет первичный ключ 1
, то [
возвращается как результат, а если первичный ключ 2
, то выход 1
. Массив или строка(?) - это [[1, 56000], [2, 55000]]
Таким образом, это в основном рассматривает переменную data
как строку. Я хочу, чтобы это был словарь? Как я могу преобразовать строку, которую я получаю, в словарь, а затем сопоставить результат суммы с его текстовыми полями?
Спасибо.