Ajax通过id访问django ManyToManyField

时间:2017-07-18 09:00:53

标签: javascript ajax django many-to-many

我的模特:

class Topping(models.Model):
    name=models.CharField(max_length=24)

class Pizza(models.Model):
    toppings=models.ManyToManyField(Topping)

我的观点:

def get_pizza(request):
    if request.is_ajax():
        pizza_list=[]
        pizza_list=Pizza.objects.all()
        pizza_list_json = serializers.serialize('json', pizza_list)
        return JsonResponse({'result': 'OK', 'data': { 
            'pizza_list': pizza_list_json, 
        }})

我的Javascript:

function get_pizza() {
    $.ajax({type: 'POST',
        url: '/path/get_pizza/',
        data: {
        },
        success: function (lista) {
            if (lista.result === 'OK') {
                var pizza_list_json=lista.data.pizza_list;
                pizza_list = JSON.parse(pizza_list_json);
                make_pizza(pizza_list);
            };
        }
    });
};

function make_pizza() {
    for (i=i; i<pizza_list.length; i++) {
        var myfield=toppings;
        var list_elem=pizza_list[i].fields[myfield];
    };
};

问题是list_elem=[1, 4]包含对象的id,而我需要名称list_elem=[tomato, peperoni]。使用外键我可以使用模型中的to_field=name选项,但使用ManyToManyField我不能。 我尝试了myfield__name但不起作用(它给出了myfield__name is not defined错误)。 那么,我该怎么办?我必须在视图中以不同的方式定义pizza_list?哪种方法可以解决这个问题?

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 创建一个新视图,将{"name": "Jalapeno"}作为参数,并以JSON格式返回名称,例如: name
  2. 创建一个函数,该函数向连接到您创建的视图的网址发送请求,并从JSON响应中捕获displayElemName(elem_id)变量。
  3. 显示所需的值,例如 Session["username"] = user;
  4. 以上是您可以用来解决问题的一般想法。但是,这将查询数据库的次数与列表中的项目一样多。如果你对此没问题,那么这将很好。