2017-09-24 103 views
0

我有一個queryset,它返回三個對象,但是當我在queryset上運行循環時,它只運行一次。Python for循環只在查詢集上運行一次

這裏是我的源代碼:

def post(self, request, *args, **kwargs): 
    form = self.form_class(request.POST or None, assigned=self.get_form_kwargs()) 
    if form.is_valid(): 
     inputs = request.POST.getlist('input_id[]') 
     pid = Model.objects.filter(id__in=inputs) 
     for obj_id in pid: 
      p = form.save(commit=False) 
      u = Staff.objects.get(id=self.request.user.id) 
      p.product = obj_id 
      p.assigned_by = u 
      p.save() 
     return JsonResponse({'status': 'ok', 'message': 'Object Created'}) 

有一個想法

+0

您使用的是什麼ORM?我的猜測是,你正在使用的那個queryset對象是不可迭代的,並且首先需要被轉換爲一個列表。 –

+0

我正在使用django,當我打印queryset的結果是']>' –

+0

我不知道我在哪裏做錯了,你可以想象它? @David Jenkins –

回答

0

終於解決了這一難題中的任何一個,問題是當我運行循環它創建了一個對象,一旦這意味着我錯了我應該創建一個實例,每次循環運行時是我的代碼:

def post(self, request, *args, **kwargs): 
     form = self.form_class(request.POST or None, assigned=self.get_form_kwargs()) 
     if form.is_valid(): 
      for pid in request.POST.getlist('input_id[]'): 
       form.save(commit=False) 
       f = MyForm(request.POST, instance=MainModel(product=RelatedModel.objects.get(id=pid), 
                   u_id=OtherModel.objects.get(id=self.request.user.id)), 
              assigned=self.get_form_kwargs()) 
       f.save() 

      return JsonResponse({'status': 'ok', 'message': 'Handover Created'}) 
+1

這將在循環內運行查詢集的get,這意味着如果沒有緩存,它將轉到數據庫。現在Django很聰明,它會緩存數據庫查詢,但你不應該依賴它。正如已經提到的人,只需將其分配到一個列表中並多次使用即可。例如。 'my_objects = list(Model.objects.get())' – tayfun

+0

@tayfun我已經將它分配給列表,並且它工作正常,感謝這個想法 –