Я новичок в использовании Django. Короче говоря, я хочу собирать данные, предоставленные пользователями. Например, я хочу собрать оценки многих предметов. По сути, я спроектирую элемент div, содержащий два элемента ввода с этими двумя именами: subject_name
и score
. Этот дизайн работает хорошо, если пользователь загружает оценку при каждом пост-запросе.
Почему пользователь хочет загрузить множество результатов за один пост-запрос?
Предполагается, что есть кнопка добавления для добавления нового элемента div, который содержит два одинаковых элемента ввода. После того, как пользователь нажмет кнопку отправки, переменная request.POST
в Django будет содержать два списка, которые представляют предмет и оценку соответственно. Однако порядок значений в этих двух списках не гарантируется, что плохо по точности. Внешний и внутренний интерфейсы показаны ниже.
<!DOCTYPE html>
<html >
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
// many imports
<script>
// initialization
$(function () {
// add-button configuration
function new_div() {
var el = `
<div class="form-group">
<label>value</label>
<input type="text" name="value" value="">
<label>class</label>
<input type="text" name="subject_name" value="">
</div>
`
$('#form4dsb').prepend(el)
}
$('#add_btn').on('click', new_div);
// submit-button configuration
$('#submit_btn').on('click',
function() {$('#form4dsb').submit()}
);
}
</script>
</head>
<body>
<div class="box-body">
<form role="form" action="127.0.0.1/dsb" method="post" id="form4dsb">
<button type="button" id="add_btn">more</button>
<button type="button" id="submit_btn">submit</button>
</form>
</div>
</body>
</html>
# Django-part
from django.views import View
from django.http import HttpResponse
class Collector(View):
def __init__(self):
super().__init__()
def post(self, request):
for subject, score in zip(request.POST.getlist('subject_name'), request.POST.getlist('score')):
print(subject, score) # Are this binding correct?
return HttpResponse(status=200, content='ok', )