2011-01-11 60 views
0

我有我的两个模型类之间的简单的一对多(models.ForeignKey)的关系:Quering不同的值throught相关模型

class TeacherAssignment(models.Model): 
    # ... some fields 
    year = models.CharField(max_length=4) 

class LessonPlan(models.Model): 
    teacher_assignment = models.ForeignKey(TeacherAssignment) 
    # ... other fields 

我想查询我的数据库获取一组与至少一个课程计划相关的不同年份的教师分配。我能够得到这一套使用Django查询API,如果我忽略了关系LessonPlan:

class TeacherAssignment(models.Model): 
    # ... model's fields 
    def get_years(self): 
     year_values = self.objects.all().values_list('year').distinct().order_by('-year') 
     return [yv[0] for yv in year_values if len(yv[0]) == 4] 

不幸的是,我不知道该如何表达的TeacherAssignment必须与至少一个LessonPlan的条件。任何想法如何能够写出查询?

在此先感谢。

回答

1

建议使用ModelManager表级ORM如下:

class TeacherAssignmentManager(models.Manager): 
    def get_years(self): 
     year_values = self.filter(lessonplan__isnull=False).\ 
         values_list('year').distinct().\ 
         order_by('-year') 
     return [yv[0] for yv in year_values if len(yv[0]) == 4] 

添加您的自定义管理模型TeacherAssignment模型类现在

objects = TeacherAssignmentManager() 

,您可以使用TeacherAssignment.objects.get_years()检索所有与至少一个课程计划相关的不同年份。

+0

谢谢!我能够在阅读您的答案之前编写正确的查询,但ModelManager建议非常好! – 2011-01-11 12:27:45

0

TeacherAssignment.objects.filter(lessonplan__isnull=False)

满足您的查询要求。获取所有具有LessonPlan的TeacherAssignments。

反向关系可以从父模型中以这种方式查询。

相关问题