Yui  
            (p)
           
           
          
              
                13.Февраль.2021 11:24:05
               
               
          #1 
           
         
        
          Можно ли как-нибудь отфильтровать записи, вызванные методом all() ? У меня во views.py есть такие наборы записей:
classes = clas.objects.all()
students = Student.objects.all()
counts = Student.objects.filter(days=1).filter(teacher=classes.teacher).count()
counts_all = Student.objects.filter(teacher=classes.teacher).count()
 
Можно ли выполнить фильтрацию для еще неполученного класса?
models.py
class Student(models.Model):
	first_name = models.CharField(max_length=50)
	last_name = models.CharField(max_length=50)
	teacher = models.ForeignKey(MyUser, on_delete=models.CASCADE, default='')
	
	days = models.IntegerField(default=0)
	days_mounth = models.IntegerField(default=0)
	days_all = models.IntegerField(default=0)
	
	days_eat = models.IntegerField(default=0)
	
	date_change = models.DateField(auto_now=True)
	def __str__(self):
		return self.first_name + '---' + self.last_name
class clas(models.Model):
	name = models.CharField(max_length=50)
	students = models.ManyToManyField(Student, blank=True)
	teacher = models.OneToOneField(MyUser, on_delete = models.CASCADE, default='')
 
         
         
           
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 11:50:32
               
               
          #2 
           
         
        
          Так а почему б сразу не использовать filter?
Но all()  вроде бы тоже возвращает QuerySet, так что наверно можно вызвать filter и потом если надо.
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 11:57:10
               
               
          #3 
           
         
        
          А какое в таком случае нужно условие фильтрации?
Идея заключалось в том, чтобы выводить общее кол-во учеников в этом классе и отмеченных учеников(которые в школе в этот день, у отмеченных учеников значение days равно 1)
days = models.IntegerField(default=0)
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 12:14:24
               
               
          #5 
           
         
        
          тогда будут выводится все ученики, которые были сегодня в школе, а надо, чтобы они выводились для каждого класса.Например: 
3а 
Присутсвует 22 из 30
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 12:42:25
               
               
          #6 
           
         
        
          Например в цикле по classes можно обращаться к его полю students.
Только при первой загрузке классов наверно желательно добавить prefetch_related, чтобы не было N+1 запросов
classes = clas.objects.prefetch_related('students').all()
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 13:53:49
               
               
          #7 
           
         
        
          
В самом питоне? Как потом передать все эти значения в html?
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 13:58:40
               
               
          #8 
           
         
        
          Так а как сейчас классы выводятся? Наверно ж есть цикл по ним.
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 14:04:20
               
               
          #9 
           
         
        
          Да, но в html же не получится фильтровать
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 14:18:46
               
               
          #10 
           
         
        
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 14:43:56
               
               
          #11 
           
         
        
          и они будут работать как методы?
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 14:51:24
               
               
          #12 
           
         
        
          Как свойства, class.someStudents. Если без параметров.
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 15:35:48
               
               
          #13 
           
         
        
          а этот метод как-то отличается от диспетчеров записей?
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 17:12:55
               
               
          #15 
           
         
        
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 18:16:52
               
               
          #16 
           
         
        
          По-моему это тут не очень подходит, тогда ж придется еще добавлять параметр, чтобы отфильтровать сначала студентов этого класса. 
И метод все равно придется добавить, чтобы получить доступ из шаблона.
 
Вообще тут с days что-то не то, скорее всего оно не в студенте должно быть, а например сделать еще одну модель со ссылками на студента и класс, и инфой о дне. Иначе как, создавать нового студента на каждый класс и день?
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 18:20:36
               
               
          #17 
           
         
        
          
Это все обнуляется каждый день
Я просто не понимаю до конца как действовать в шаблоне. То что можно сделать фунцию это понятно, непонятно как это все подсчитать в шаблоне
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 18:30:02
               
               
          #18 
           
         
        
          думаю к такой конструкции прибегнуть:
for cl in classes:
		if 'c' not in context:
			context['c'] = [[cl.name, cl.students.filter(days=1).count()]]
		else:
			context['c'] = context.get('c') + [[cl.name, cl.students.filter(days=1).count()]]
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            AlexP  
            (Alex P.)
           
           
          
              
                13.Февраль.2021 18:31:20
               
               
          #19 
           
         
        
          Так просто передать классы в шаблон, и у класса в цикле в шаблоне она должна работать как все остальные свойства класса.
 AlexP:
 
class.someStudents
 
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Yui  
            (p)
           
           
          
              
                13.Февраль.2021 18:33:57
               
               
          #20 
           
         
        
          то есть вот так, а в шаблоне просто вызывать class.get ?
class clas(models.Model):
	name = models.CharField(max_length=50)
	students = models.ManyToManyField(Student, blank=True)
	teacher = models.OneToOneField(MyUser, on_delete = models.CASCADE, default='')
	def get(self):
		return self.students.filter(days=1).count()