Добавление строки в JqGrid с помощью Django - PullRequest
0 голосов
/ 23 июня 2011

Я использую JqGrid в шаблоне Django. Работает нормально до добавления новой строки в сетку. Я использую для этого кнопку «+» на панели навигации. Проблема в том, что когда я нажимаю «Отправить» в диалоговом окне «Добавить запись», появляется ошибка HTTP 403. Если я изменю editurl на "/ ajax / stocks / add" (удалить последнюю косую черту), появится ошибка HTTP 500.

Кто-нибудь знает, в чем здесь проблема? В браузере запрос к http://127.0.0.1:8000/ajax/stocks/add/ (используется сервер devjango) возвращает True, как и ожидалось.

И я не совсем понимаю, что должна делать функция ajax_stock_add_view. Должен ли он вернуть статус успеха или что-то еще назад?

Вот мой шаблон django:

 {% block extrascript %}
    <script type="text/javascript">
        $(document).ready(function() {
            jQuery("#stocks-grid").jqGrid(
                    { url:'/ajax/stocks/', datatype: "json", colNames:['Name','Comment'],
                        colModel:[
                            {name:'name',index:'name', editable:true},
                            {name:'comment',index:'comment', editable:true}
                        ],

                        editurl : "/ajax/stocks/add/", rowNum:10, pager: '#stocks-grid-pager', sortname: 'name', viewrecords: true});
            jQuery("#stocks-grid").jqGrid('navGrid', '#stocks-grid-pager');
        });
    </script> {% endblock %}

{% block content %}
    <table id="stocks-grid"></table>
    <div id="stocks-grid-pager"></div> {% endblock %}

Вот urls.py:

...
     (r'^ajax/stocks/$', ajax_stocks_view),
     (r'^ajax/stocks/add/$', ajax_stocks_add_view),
...

и views.py

def ajax_stocks_view(request):
    json = get_grid_json(Stock)
    return HttpResponse(json, mimetype='application/json')

def ajax_stocks_add_view(request):
    return HttpResponse(True)

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Это зависит от того, как именно вы пытаетесь настроить это.Если у вас есть форма для создания нового элемента, и когда пользователь отправляет запрос, вы хотите, чтобы новый элемент был сохранен в базе данных и добавлен в сетку, тогда вот ваш процесс:

  1. Пользователь отправляет форму
  2. Форма отправляется на сервер через AJAX-запрос к / ajax / stocks / add /
  3. Просмотр в / ajax / stocks / add / добавляет элемент в базу данных и возвращает ответ (Вы должны отправить какой-нибудьфактического ответа. True не является ответом, но '[{"success":true}]' (JSON) с правильным mime-типом.)
  4. Клиент получает ответ из представления в / ajax / stocks / add /.Если запрос был успешным, JavaScript добавляется в сетку, в противном случае отображается ошибка для пользователя.
0 голосов
/ 23 июня 2011

Проблема была в CSRF-защите в Django . В моем случае JqGrid создал форму без токена CSRF, поэтому проверка CSRF не удалась. Здесь - хорошее решение проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...