У меня есть новый проект Django с заданными ограничениями c для отображения данных, подлежащих редактированию.
Я не уверен, что это лучший способ выполнить работу.
Я хочу, чтобы пользователь:
- мог редактировать данные непосредственно в таблице html
- , добавлять новые строки в базу данных (данные отображаются на экране)
С учетом 2 форм:
- индексная форма, отображающая данные моей модели. Когда я нажимаю кнопку «Изменить настройки», пользователь перенаправляется на редактирование формы с последними 4 отправленными записями в контексте (параметры)
- форма редактирования отображает последние 4 записи моей таблицы с редактируемыми строками. Когда я нажимаю кнопку «Изменить настройки», я отправляю данные со страницы html с запросом ajax
В моем представлении ajax я хочу добавить данные, полученные в моей модели (4 новых строк).
Но приведенные ниже данные не в формате JSON, а в виде строки ??:
данных
[
{
"ran_st1": "1",
"ran_st2": "1",
"bra_00A_act": "1",
"bra_00A_lib": "Polyvitamines et oligo-éléments"
},
{
"ran_st1": "1",
"ran_st2": "0",
"bra_00A_act": "1",
"bra_00A_lib": "Polyvitamines et oligo-éléments"
},
{
"ran_st1": "0",
"ran_st2": "1",
"bra_00A_act": "null",
"bra_00A_lib": "null"
},
{
"ran_st1": "0",
"ran_st2": "0",
"bra_00A_act": "null",
"bra_00A_lib": "null"
}
]
Я не понимаю, как конвертировать как JSON?
views.py
@login_required
def edit(request):
# 4 last records to be send to the client
parameters_all = Bras.objects.all().order_by('bra_dat')
# parameters = serializers.serialize("json",[p for p in parameters_all.reverse()[:4]], fields=('ran_st1','ran_st2','bra_00A_act','bra_00A_lib','bra_00B_act','bra_00B_lib','bra_00C_act','bra_00C_lib','bra_00D_act','bra_00D_lib','bra_00E_act','bra_00E_lib','bra_00F_act','bra_00F_lib','bra_00G_act','bra_00G_lib','bra_00H_act','bra_00H_lib','bra_00I_act','bra_00I_lib','bra_00J_act','bra_00J_lib'))
parameters = serializers.serialize("json",[p for p in parameters_all.reverse()[:4]], fields=('ran_st1','ran_st2','bra_00A_act','bra_00A_lib',))
...
return render(request, 'randomization_settings/edit.html', {'form': form, 'parameters': parameters,})
# ajax queries -> send modifyed data to server
def ajax(request):
if request.method == "POST":
datas = request.POST.get('datas',False)
print(datas)
# Bras.objects.create(ran_st1 = 1, ran_st2 = 1, bra_00A_act = 1, bra_00A_lib = 'test', bra_dat=timezone.now(), bra_log = request.user.username, pay_ide_id=1)
else:
datas = ''
return render(request, 'randomization_settings/ajax.html', {})
edit. html
...
# data from my view edit
<h1 id="parameters" data-parameters="{{ parameters }}">Randomization settings form</h1>
<table></table> // table built dynamically with data received (from data-parameters above)
...
# JS Code
<script>
$(document).on('click', '#modifier', function(event)
{
event.preventDefault();
$('#table_parametrage tr').each(function() {
// var ma_ligne = [];
var ma_ligne = {};
$(this).find('td div').each (function() {
// ma_ligne.push($(this).eq(0).html());
ma_ligne[$(this).attr("col_name")] = $(this).eq(0).html();
});
mon_tableau.push(ma_ligne);
});
mon_tableau.shift();
parameters = JSON.stringify(mon_tableau, null, 2);
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
$.ajax({
type: "POST",
url: $("#ajax").data("ajax-url"),
data: {
csrfmiddlewaretoken: csrftoken,
'datas' : parameters,
},
dataType: 'html',
success: function (data) {
}
});
})
<script>