我的两个模型类之间有一个简单的一对多(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相关的条件。我有什么想法可以编写查询吗?
提前致谢。
答案 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。
可以通过父模型以这种方式查询反向关系。