Jquery и Django множественный флажок - PullRequest
3 голосов
/ 03 февраля 2010

Я новичок в jquery, поэтому, пожалуйста, потерпите меня. У меня есть функция jquery, которая позволяет мне выбрать несколько флажков и создать строку следующим образом:

function getSelectedVals(){
     var tmp =[];
     $("input[name='checks']").each(function() {
     if ($(this).attr('checked'))
     {
        checked = ($(this).val());
        tmp.push(checked);
     }
     });
     var filters = tmp.join(',');
     alert(filters)
     return filters;
}

Затем я вызываю функцию представления django и передаю строку следующим образом:

selected = getSelectedVals();
var myurl = "/bills/delete/?id=" + selected;
$.ajax({
    type: "GET",
    url: myurl,
    data: selected,
    cache: false

});

На сервере у меня есть функция удаления представления, которая перебирает значения флажков и манипулирует списком.

def delete(request):
    global myarray
    idx = request.GET[u'id']
    listidx = idx.split(',')
    for l in listidx:
        value = myarray[int(l)]
        myarray.remove(value)
    return HttpResponse("/bills/jqtut/")

Проблема в том, что на сервере все индексы, которые я отправляю как строку GET, не обрабатываются, только половина -

Пожалуйста, помогите мне! Спасибо

Ответы [ 2 ]

7 голосов
/ 03 февраля 2010

Из того, что я вижу, вы делаете это наоборот. Вы должны установить одинаковое имя на всех флажках. Я не знаю, почему вы отправляете его по GET, я бы посоветовал отправить его по почте.

<input type="checkbox" name="vehicle" value="Bike" />
<input type="checkbox" name="vehicle" value="Car" />
<input type="checkbox" name="vehicle" value="Airplane" />

Затем используйте метод getlist () в вашем представлении:

def delete(request):
    values = request.POST.getlist(u'vehicle')
    # Handling goes here.

Но в любом случае, если вам действительно не нужно делать пользовательские вещи (однако особые случаи не настолько особенные, чтобы нарушать правила;), используйте формы Django. Там уже есть флажок списка OOTB. Я не уверен, почему вы даже рассматриваете возможность использования JavaScript в этом самом случае.

2 голосов
/ 03 февраля 2010

во-первых, я не знаю, нужно ли вам манипулировать значениями флажка в строку, как вы делаете. если вы назначите им один и тот же атрибут name, сериализация http (или jQuery) сделает это за вас.

На стороне Django используйте getlist, чтобы получить список, метод доступа [] получает только последнее значение в списке параметров.

Обработка Http по умолчанию, однако, не отправляет через значения флажков, которые не отмечены, поэтому вы можете встроить некоторые проверки, которые сравнивают созданные вами флажки с данными, которые вы возвращаете.

Как говорит Гаводжа выше, формы django, вероятно, являются хорошим ответом на это: В частности, вы хотите использовать MultipleChoiceField с виджетом CheckboxSelectMultiple и вариантами выбора:

my_field = forms.MultipleChoiceField(choices=SOME_CHOICES, widget=forms.CheckboxSelectMultiple())

также см .: В Django есть способ отображать варианты в виде флажков?

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