【问题标题】:Django get specific QuerySet with GET ajax Call on button clickDjango 使用 GET ajax Call on button click 获取特定的 QuerySet
【发布时间】:2021-04-07 20:30:49
【问题描述】:

我有一个问题,我不知道我是否使用了解决问题的好方法,但他们是问题所在,我有一个客户列表,我显示在客户页面上,通过一个简单的方式获取所有客户

clients = client.objects.all()

所以所有客户端都可以有很多会话,并且会话有很多客户端,它就像一个多对多关系,所以我尝试通过单击一个按钮(按钮打开一个 boostrap 模态),所以我尝试在单击时发送所选客户端的 id,并使用 ajax GET 方法将其发送到 django 视图中,并直接使用此 ID 查找与此客户端相关的所有会话并返回查询到这个页面,所以 ajax 工作正常,我可以发送 id,但它就像视图它没有发送任何东西。所以他们是我的代码希望你能帮助我:

Html(在 forloop 客户端上插入的 div):

<div class="list-group list-group-me">
<ul class="list-group list-group-horizontal">
<li class="list-group-item">{{ client.name }}</li> 
<li class="list-group-item">{{ client.email }}</li>
<li class="list-group-item">{{ client.created_at | date:" M Y" }}</li>
<li class="list-group-item list-group-item-success">Active</li>
<li class="list-group-item">025f55azg5</li> 
<li><div class="btn-group">
  
   <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" id="AddSession"
   data-id="{{ client.id }}">
Add
</button>
  <button type="button" class="btn btn-primary" data-id="{{ client.id }}" >View</button>
</div>
  </li>
</ul>
</div>

视图(尝试 .all() 只是为了看看它是否工作):

class show_session(View):

def get(self, request , id):
    Sclient = session.objects.all()
    #Sclient = session.objects.filter(client__id=id)
    context = { 'Sclient': Sclient }

    

    return render(request, 'coach/addclient.html', { 'Sclient': Sclient })

model.py:

class session(models.Model):
   name = models.CharField(max_length=80)
   client = models.ManyToManyField(client, blank=True)
   coach = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
   created_at = models.DateTimeField(auto_now_add=True)
   detail = models.CharField(max_length=256)

   def __str__(self):
      return self.name

页面的主视图:

def addclient(request):
form = ClientForm
clients = client.objects.filter(affiliation=request.user.id)
Csession = session.objects.filter(coach=request.user.id)

context = {'form': form ,'clients': clients , 'Csession' : Csession}

form = ClientForm()
if request.method == 'POST':
    form = ClientForm(request.POST)
    print(form)

    if form.is_valid():
        print('adding client 1133', form)
        name = request.POST.get('name')
        email = request.POST.get('email')
        new_client = client.objects.create(name= name, email=email , affiliation=request.user)
        new_client.save()
        return JsonResponse({'client': model_to_dict(new_client)}, status=200)
    else:
        print('not adding client to the form 1333')
        return redirect('addclient')


return render(request, 'coach/addclient.html', context= context)

还有ajax函数:

$("#AddSession").click(function(){


    var dataID = $(this).data('id');
    console.log(dataID)
    $.ajax({
    
        url:'addclient/'+ dataID +'/added',
        data: {
        csrfmiddlewaretoken: csrfToken,
        id: dataID
        },
        type : "get",

        success: function(response) {
            
            console.log("hey hey session over here");
 }

    })

});

我不知道是否可以只使用主视图来获取数据并显示它,当我尝试访问 show_session.view 的 url 时,查询集正在工作,但我仍在尝试在 addclient url 上显示它 感谢您的时间和帮助!

【问题讨论】:

    标签: django ajax list view get


    【解决方案1】:

    所以我已经解决了这个问题,我刚刚使用 POST 方法将当前用户的 id 发送到视图,然后我使用 action data 属性来处理我的视图上的多个帖子,并使用 ajax 给出的 id正确的查询集并将查询集序列化为 JSON 对象,因此 ajax 可以在单击时添加与所选客户端关联的会话,它们是代码: 查看:

        if request.method == 'POST' and request.POST['action'] == 'session':
        print("session response")
        id = request.POST.get('id')
        print(id)
        #Sclient = list(session.objects.filter(coach=request.user.id))
        Sclient = session.objects.filter(client__id=id)
    
        SerializedQuery = serializers.serialize('json', Sclient)
        return JsonResponse(SerializedQuery, safe=False)
    

    阿贾克斯:

    $("#AddSession").click(function(){
    
    
        var dataID = $(this).data('id');
        
        $.ajax({
        
            url: $(this).data('url'),
            data: {
            csrfmiddlewaretoken: csrfToken,
            id: dataID,
            action: 'session',
            //dataType:"json"
            },
            type : "post",
    
            success: function(response) {
                
                console.log("hey hey session over here");
                console.log(response)
                var obj = jQuery.parseJSON(response)
                //console.log(obj[1].fields.name)
    
                var Sarray = [];
                var Selector = $("#assigned");
                var count = $("#assigned span")
    
                console.log(count.length)
    
            //used to limit the number of element on div on first click
            
            if(count.length < obj.length)   
            {
                for (i = 0 ; i < obj.length ; i++) {
                    // console.log(obj[i].fields.name)
                     Sarray.push(obj[i].fields.name)
                     Selector.append('<a href="#"><span class="badge badge-success">'+ obj[i].fields.name +' x </span></a>')
                    }
    
                    console.log("yoow",Sarray.length)
            }
                
     }
    
        })
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多