根据相关模型的方法尝试筛选查询

时间:2013-07-22 13:08:44

标签: django django-queryset

class Course(models.Model):

   def is_active(self):
      return self.enroll_set.count()>0

class CourseEvent(models.Model):

   course = models.ForeignKey(Course)

我想找到仅指向活动课程的所有Events。 类似的东西:

events = CourseEvent.objects.filter(course.is_active=True)

谢谢

2 个答案:

答案 0 :(得分:2)

您的is_active()方法毫无意义。

is_active意味着某些种类的布尔值不是62.所以有一些东西你可以立即纠正。通常情况下,我会在is_active模型上设置Course标记(从而完全删除方法is_active)并切换使ORM调用非常直接:

class Course(models.Model):
    active = models.BooleanField(default=False)

events = CourseEvents.objects.filter(course__active=True)

答案 1 :(得分:0)

答案在这里: https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate

你做了一个注释,它可以作为一个字段过滤。

看起来像这样:

CourseEvent.objects.annotate(is_active=Count('course__enroll')).exclude(is_active=0)