Django: проблема с форматом данных (строка вместо JSON) - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть новый проект Django с заданными ограничениями c для отображения данных, подлежащих редактированию.

Я не уверен, что это лучший способ выполнить работу.

Я хочу, чтобы пользователь:

  1. мог редактировать данные непосредственно в таблице html
  2. , добавлять новые строки в базу данных (данные отображаются на экране)

С учетом 2 форм:

  1. индексная форма, отображающая данные моей модели. Когда я нажимаю кнопку «Изменить настройки», пользователь перенаправляется на редактирование формы с последними 4 отправленными записями в контексте (параметры)
  2. форма редактирования отображает последние 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>
...