2012-04-14 9 views

Antwort

0

Versuchen

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() 

Es gibt keine direkte Beziehung zwischen User und Course. Sie müssen Gruppen abrufen und dann Kurse abrufen, indem Sie OneToOneField, das durch Modellvererbung generiert wird, zwischen Group und Course verfolgen.

Nicht sicher, warum Sie die Unterklasse Group. Sie könnten auch

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

Wenn Sie wirklich wollen User erweitern User.courses wie User.groups haben, könnten Sie

# 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') 
Verwandte Themen