2014-01-17 25 views
0

在單個數據庫中使用四個模型,並且我想要計算課程上的員工總數。四個模型的查詢集

本工作代碼當前計算:

  1. 課程名稱,即Course01,Course02
  2. 獨特課程的數量,即2個療程
  3. 每個療程的實例的數量,即Course01 = 3 ,Course02 = 1,總的課程= 4

models.py

class Course(models.Model): 
    name   = models.CharField(max_length=75) 

class Employee(models.Model): 
    first_name = models.CharField(max_length=75) 
    surname  = models.CharField(max_length=75) 

class CourseDetail(models.Model): 
    course  = models.ForeignKey(Course) 
    date  = models.DateField(blank=True, null=True) 
    renew_date = models.DateField(blank=True, null=True, default=None) 
    attendance = models.ManyToManyField(Employee, through='CourseDetailAttendance') 

class CourseDetailAttendance(models.Model): 
    course_details = models.ForeignKey(CourseDetail) 
    employee  = models.ForeignKey(Employee) 

我想回考生總數每一個獨特的課程組,即Course01 = 24名候選人

我有什麼那麼遠,

views.py

from django.db.models import Count 

def BetweenDates(request): 
    start_date = '2013-03-01' 
    end_date = '2013-03-30' 

    cr = CourseDetail.objects.filter(date__range=(start_date, end_date)) 
    cc_count = cr.count() 
    cc_grouped = cr.values('course__name').annotate(Count('course')) 
    cc_grouped_count = cc_grouped.count() 

    cc_attendance = ??????????? 

    context = {"cc_grouped_count": cc_grouped_count, 
      "courses_grouped": cc_grouped, 
      "date_range": cr, 
      "courses_count":cc_count, 
      "cc_attendance": cc_attendance, 
      } 
    return render_to_response('between_dates.html', context, context_instance=RequestContext(request)) 

between_dates.html

{% extends 'base.html'%} 
{% block content %} 
<h4><p>{{ cc_grouped_count }} courses delivering {{ courses_count }} course instances between {{ startdate }} and {{ enddate }}</p></h4> 
    {% for cs in courses_grouped %} 
    <div class = "news-articles ingrid in-thirds"> 
     <div class = "unit"> 
     <div class= "box"> 
      {{ cs.course__name }} 
     </div> 
     </div> 
     <div class = "unit"> 
     <div class= "box"> 
      {{ cs.course__count }} 
     </div> 
     </div> 
     <div class = "unit"> 
     <div class= "box"> 
      total number of candidates goes here {{ cc_attendance }} 
     </div> 
     </div> 
    </div> 
    {% endfor %} 

回答

0

假設,通過課程組你的意思是在某一天(CourseDetails -instance)課程,和你想的課程名稱和日期進行查詢:

course_details = CourseDetail.objects.get(course__name='Django 101', date='2013-03-01') 
cc_attendance = CourseDetailAttendance.objects.filter(course_details=course_details).count() 

如果你想擁有給定課程的服務員,當他們參加不管,運行

course_details = CourseDetail.objects.filter(course__name='Django 101') 
cc_attendance = CourseDetailAttendance.objects.filter(course_details__in=course_details).count() 

要獲得參與者的數量,在一定時限內:

course_details = CourseDetail.objects.filter(course__name='Django 101', date__range=[start_date, end_date]) 
cc_attendance = CourseDetailAttendance.objects.filter(course_details__in=course_details).count() 

順便說一句,是否有可能在同一天有一個給定的課程(例如Django 101)的幾個實例?如果不是,我建議你讓這個組合獨一無二:

class CourseDetail(models.Model): 
    course  = models.ForeignKey(Course) 
    date  = models.DateField(blank=True, null=True) 
    renew_date = models.DateField(blank=True, null=True, default=None) 
    attendance = models.ManyToManyField(Employee, through='CourseDetailAttendance') 

    class Meta: 
     unique_together = ('course', 'date') 
+0

謝謝你skoll。在模板中,我有這個代碼來顯示課程名稱和課程實例。 {%爲courses_grouped%中的cs%} {{cs.course__name}} {{cs.course__count}} 請問您可以使用此循環的代碼嗎? 我一直在玩python shell,但我無法創建一個解決方案。 –

+0

這是什麼,你試圖做到嗎?問題是什麼? – skoll

+0

從我的數據庫中,我現在的代碼返回特定月份的唯一課程名稱列表(15)和課程數量(27)。我無法得到的是在15門課程中每個人都受過訓練的人數。你的代碼對於一個指定的課程來說非常有用,但是我無法設法讓它適用於課程組。你怎麼看? –