2016-03-10 3 views
0

У меня есть следующие две модели.Django получить сумму на основе общего ключа

class TeacherInfo(models.Model): 
    name = models.CharField(max_length=200) 
    school_id = models.ForeignKey('admin_app.School') 
    timestamp = models.DateTimeField(auto_now=True, blank=True) 

class AssignedSheetStatus(models.Model): 
    level = models.ForeignKey('admin_app.Levels') 
    subject = models.ForeignKey('admin_app.Subject') 
    set = models.ForeignKey('admin_app.Set') 
    teacher = models.ForeignKey('teacher.TeacherInfo') 
    assigned_count = models.PositiveIntegerField(default=0) 
    corrected_count = models.PositiveIntegerField(default=0) 
    timestamp = models.DateTimeField(auto_now_add=True) 

Теперь я хочу присоединиться эти две таблицы так, что у меня есть name из TeacherInfo и суммы assigned_count, corrected_count.

Обычно для одного учителя я хотел бы сделать:

AssignedSheetStatus.objects.filter(teacher__id=teacher_id).aggregate(Sum('assigned_count'), Sum('corrected_count')) 

Но здесь я хочу это для всех учителей в TeacherInfo.

Каков наилучший способ достичь этого?

+0

Помог ли мой ответ? Если да, то согласитесь, пожалуйста. – ilse2005

ответ

0

Вы можете сделать это наоборот. Аннотировать к TeacherInfo:

TeachInfo.objects.annotate(Sum('assignedshetsstatus__assigned_count'), Sum('assignedsheetstatus__corrected_count')) 
+0

Может быть, лучше с 'annotate' вместо' aggregate'? – albar

+0

@albar. Ты прав. Благодаря! – ilse2005

Смежные вопросы