【问题标题】:Trouble in passing ManyToMany Queryset data via Ajax call to django template通过 Ajax 调用将 ManyToMany Queryset 数据传递给 django 模板时遇到问题
【发布时间】:2021-08-08 08:47:59
【问题描述】:

我有两个模型类

 class Dishes(models.Model):
    dishName=models.CharField()

 class Hotels(models.Model):
    hotelname=models.CharField()
    dishes = models.ManyToManyField('Dishes')

在views.py中

  def check_dishes(request):
    HotelId = request.GET.get('Id', None)
    hotelObj = Hotels.objects.get(pk=HotelId )
    dishesObj= hotelObj.dishes.all()
    data = {
    'HotelName': hotelObj.hotelname
    }
    Dlist=[]
    for dish in dishesObj:
       Dlist.append(dish.dishName)
    data.update([
        ('dishes_list', Dlist),
   ])
   print(data)
   *** output as below
   {'HotelName': 'DeMart', 'dishes_list': ['pizza','burger']}***
return JsonResponse(data,safe=False)

在hotels.html 中我们有一个类似的ajax 调用

 $("#getHotelDishes").keyup(function () {
  $.ajax({
     url: "{% url 'check_dishes' %}",
     dataType: 'json',
     data: {
        "hotelId": Id
     },
     // on success
     success: function (data) {
          {% for dishes in data.dishes_list%}
                //print dish Names of this Hotel
          {% endfor %}
     },
     // on error
      error: function (response) {
        console.log(response.responseJSON.errors)
      }
  })

});

这是通过 Ajax 调用传递 Queryset 数据的正确方法吗,我无法在 for 循环中得到任何结果

【问题讨论】:

  • 你调试过ajaxsuccess函数中data.dishes_list的值是什么吗?
  • 这里.GET.get('Id', None).. Id应该是hotelId,即:request.GET.get('hotelId', None)

标签: django ajax django-templates many-to-many


【解决方案1】:

我明白了,我正在使用模板标签来迭代列表不起作用,我刚刚删除并更新了 ajax 函数,如下所示

  // on success
 success: function (data) {
    for (i = 0; i< data.dishes_list.length; i++) {
         //do something
    }
  },

但是为什么模板标签不起作用,我还是想知道!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2012-10-09
    • 1970-01-01
    • 2019-11-16
    • 2022-07-26
    相关资源
    最近更新 更多