2015-02-07 62 views
0

我有一個模型:Django的過濾器註釋MTM

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) 

現在,我怎麼可以檢查用戶是否有權訪問教訓?

+0

你所說的 「獲取教訓」 的意思是必要的嗎? – Carlos 2015-02-07 11:46:29

+0

例如:我們有lesson1,lesson2,lesson3,我需要通過第1,2課以獲得第3課的學習。並且我們在required_lessons mtm字段 – Arti 2015-02-07 11:49:57

回答

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:沒有測試,調整可能是

+0

中設置了這個課程1,2。想象一下,我們有很多課程...如何與幾個查詢做到這一點? – Arti 2015-02-07 13:36:08

+0

我想:按照你的寫法完成課程,然後我們需要.annotate(completed = Count(completed))例如。如果我們有變量完成= 0,那麼訪問被拒絕。但在實踐中如何做到這一點,我不知道。 – Arti 2015-02-07 13:40:31

+0

然後你可以完成= user.userlesson_set.filter(is_passed = True).count() – Carlos 2015-02-07 13:44:26