Как передать переменную onclick из javascript в форму django
Я новичок, и мне очень нужна ваша помощь для функции.
У вас есть таблица, и когда вы нажимаете на ячейку, открывается форма во всплывающем модале для ввода некоторого текста под названием "триграмма". Затем вы выбираете "время" (соответствующее строке) и "позицию" (соответствующую столбцу) на всплывающей форме, отправляете ее, и она помещает текст в нужную ячейку таблицы. Это работает правильно.
Теперь я хотел бы взять переменные "время/позиция" непосредственно из нажатой ячейки и передать эти переменные в форму django, чтобы вам нужно было только ввести текст в форму и отправить ее. У меня есть функция для получения времени и позиции после нажатия на ячейку, которая работает для отображения позиции нажатой ячейки (заголовок столбца, относящийся к этой ячейке) и времени (заголовок строки, относящийся к этой ячейке) :
$('table').on('click', 'td:not(:first-child)', function(e) {
var time = e.delegateTarget.tHead.rows[1].cells[this.cellIndex],
position = this.parentNode.cells[0];
alert([$(position).text(), $(time).text()]);
})
У меня также есть эта функция для отображения модала, которая работает правильно :
$(function () {
var cells = document.querySelectorAll('td:not(:first-child)');
cells.forEach((e)=>{
e.addEventListener("click", ()=>{
$.ajax({
beforeSend: function () {
$("#modal-activity").modal("show");
},
success: function (data) {
$("#modal-activity.modal-content").html(data.html_form);
}
});
});
});
});
Эта функция открывает следующую форму при нажатии на ячейку :
<div class="modal fade" id="modal-activity" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3> Ajouter un contrôleur </h3>
</div>
<div class="modal-body">
<form method="POST" action="" class="form-group" id="activity-form">
{% csrf_token %}
<input style="margin:5px;" type="text" class="form-control" placeholder="Trigramme" name="trigramme">
<select style="margin:5px;" class="form-select" id="inputGroupSelect01" name="pos">
<option selected>Position</option>
<option value="CDT">CDT</option>
<option value="CS">CS</option>
<option value="SQR">SQR</option>
<option value="COO">COO</option>
<option value="INI">INI</option>
</select>
<select style="margin:5px;" class="form-select" id="inputGroupSelect01" name="time">
<option selected>Début</option>
{% for time in TIME_VALUES %}
<option value="{{time}}">{{time}}</option>
{% endfor %}
</select>
<button style="margin-top: 10px;margin-left:20px" type="submit" name="add" value="add" class="btn btn-outline-dark">Ajouter</button>
</form>
<div class="modal-footer">
<button type="button" class="close" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
</div>
</div>
Как вы видите, на этой форме нужно ввести текст, а затем выбрать время и позицию. Теперь вопрос: как передать переменные pos и time из javascript в форму django, чтобы пользователю не пришлось выбирать их вручную в форме?
Вот соответствующая функция в файле views.py :
def schedule(response, id):
try:
t = Table.objects.get(id=int(hashids.decode(id)[0]))
except:
t = None
if response.method == "POST":
if response.POST.get("add"):
form = Activities(response.POST)
if form.is_valid():
trigramme = form.cleaned_data["trigramme"]
pos = form.cleaned_data["pos"]
time = form.cleaned_data["time"]
t.activity_set.create(trigramme=trigramme, pos=pos, time=time)
elif response.POST.get("delete"):
t.activity_set.filter(id=response.POST.get("id")).delete()
return HttpResponseRedirect("/%s" %hashids.encode(t.id))
return render(response, "main/create.html", {'rangeHour':range(24),
'rangeMinute':range(0,60,30),
'rangePos':['CDT', 'CS', 'SQR', 'COO', 'INI',],
'table':t,
'table_day':t.day.strftime("%d-%m-%Y"),
'TIME_VALUES':TIME_VALUES,})
Здесь находится form.py :
class Activities(forms.ModelForm):
trigramme = forms.CharField(label="Nom", max_length=6, required=True)
pos = forms.CharField(label="Position", max_length=10, required=True)
time = forms.CharField(label="Heure", max_length=10, required=True)
class Meta:
model = Activity
fields = [
'trigramme',
'pos',
'time',
]
Заранее спасибо за помощь!