Django过滤注释mtm

时间:2015-02-07 11:40:49

标签: django orm model annotations aggregate

我有一个模特:

class Lesson(models.Model):
    ...
    required_lessons = models.ManyToMany('self')
    ...

当用户通过课程时,我在表格中创建一条记录:

class UserLesson(models.Model):
    user = models.ForeignKey(User)
    lesson = models.ForeignKey('courses.Lesson')
    is_passed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)

现在,我如何检查用户是否可以访问课程?

1 个答案:

答案 0 :(得分:0)

这样的事情:

def has_access(user, lesson):
    completed = user.userlesson_set.filter(is_passed=True).values_list("lesson", flatten=True)
    return all([l in completed for l in lesson.required_lessons])

PS:未经测试,可能需要进行调整