2012-04-14 16 views

答えて

0

は、ユーザーとコースの間に直接の関係はありません

qs = request.user.groups.filter(course__isnull=False) 
for group in qs: 
    course = group.course 

# or shortcuts 
User.get_courses = lambda self: map(lambda g: g.course, self.groups.filter(course__isnull=False)) 
# or 
User.get_courses = lambda self: Course.objects.filter(pk__in=self.groups.all()) 
# then 
request.user.get_courses() 

を試してみてください。グループをフェッチして、モデル継承によって生成されたOneToOneFieldに続いてGroupCourseの間でコースを取得する必要があります。

Groupをサブクラス化する理由がわかりません。また

class Course(models.Model): 
    students = models.ManyToManyField(User, related_name='courses') 

は、あなたは本当にあなたはできる、User.groupsようUser.coursesを持っているUserを延長したいことができれば

# Option 1 
# in models.py 
class UserCourse(models.Model): 
    user = models.ForeignKey(User) 
    course = models.ForeignKey(Course, db_column='group_id') 
    class Meta: 
     db_table = User.groups.through._meta.db_table 

m2m = models.ManyToManyField(Course, related_name='students', through=UserCourse) 
m2m.contribute_to_class(User, 'courses') 

# Option 2 
# simpler but has duplicated m2m table and different API 
# Also a Course instance will not have corresponding 
# Group instance in user.groups, which may not be correct in logic. 
class UserCourse(models.Model): 
    user = models.ForeignKey(User, related_name='courses') 
    course = models.ForeignKey(Course) 

# Option 3 
# just as Option 2, but w/ M2M API 
class UserCourse(models.Model): 
    user = models.ForeignKey(User) 
    course = models.ForeignKey(Course) 
m2m = models.ManyToManyField(Course, related_name='students', through=UserCourse) 
m2m.contribute_to_class(User, 'courses') 
関連する問題