通过相关模型查询不同的值

时间:2011-01-11 00:49:04

标签: django django-models

我的两个模型类之间有一个简单的一对多(models.ForeignKey)关系:

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

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

我想查询我的数据库,以获得与至少一个LessonPlan相关的不同年份的TeacherAssignments。如果忽略与LessonPlan的关系:

,我可以使用Django查询API获取此集
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相关的条件。我有什么想法可以编写查询吗?

提前致谢。

2 个答案:

答案 0 :(得分: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()检索与至少一个LessonPlan相关的所有不同年份。

答案 1 :(得分:0)

TeacherAssignment.objects.filter(lessonplan__isnull=False)

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

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