在选择动态中将var js发送到django视图

时间:2013-02-17 16:39:50

标签: select dynamic

我正在做依赖选择,我在查询时遇到了问题,这里是js

function cargar_paises() {
$.getJSON('cargar_paises', {}, function (data) {
    $('#paises').empty();
    $('#paises').append('<option value="0">Seleccione ...</option>');
    $.each(data, function (id, desc) {
        var option = $('<option></option>', {value:(id+1), text:desc});
        $('#paises').append(option);
        });
    });
}

和我的观点

def cargar_paises(request):
if request.is_ajax:

    pais = Pais.objects.all()
    paises = []

    for s in pais:
        aux = []
        id = s.pk
        aux.append(id)
        nombre = s.nombre
        aux.append(nombre)
        paises.append(aux)

    return HttpResponse(json.dumps(paises), mimetype='aplication/json')

问题是当我在select中打印值并将id发送到另一个查询时,我所采用的值是select的索引,而不是id_pais的值。

2 个答案:

答案 0 :(得分:0)

尝试将ID设置为:

var option = $('<option></option>', {value:(paises[0].aux.id+1), text:desc});

答案 1 :(得分:0)

你可以使用词典列表而不是列表列表更好地解决这个问题,即使使用dJango .values(),但为了保持简单,你可以使用完全相同的方法,

function cargar_paises() {
$.getJSON('cargar_paises', {}, function (data) {
    $('#paises').empty();
    $('#paises').append('<option value="0">Seleccione ...</option>');
    $.each(data, function (item) {
        var option = $('<option></option>', {value:item.id, text:item.nombre});
        $('#paises').append(option);
        });
    });
}

在视图中,

def cargar_paises(request):
    if request.is_ajax:

        pais = Pais.objects.all()
        paises = []

        for s in pais:
            aux = {}
            aux['id'] = s.pk
            aux['nombre'] = s.nombre
            paises.append(aux)

        return HttpResponse(json.dumps(paises), mimetype='aplication/json')

请记住,你可以将Python字典映射到Json对象,将python列表映射到Json数组,另一个好的提示是使用django-dajaxice它是一个非常好的工具来做你想要的事情,无论如何这样做很好dJango的事情。

修改

我真的考虑过它,在查询集中使用.values(),你的观点,

def cargar_paises(request):
    if request.is_ajax:
        paises = Pais.objects.values('id', 'nombre')
        return HttpResponse(json.dumps(paises), mimetype='aplication/json')

您可以找到文档here