1
私はグループモデルをサブクラス化するモデルCourseを持っています。彼のすべてのグループと同様の方法でユーザーコースにアクセスするにはどうすればいいですか(例:request.user.courses
)?UserからGroupサブクラスにアクセスするには?
私はグループモデルをサブクラス化するモデルCourseを持っています。彼のすべてのグループと同様の方法でユーザーコースにアクセスするにはどうすればいいですか(例:request.user.courses
)?UserからGroupサブクラスにアクセスするには?
は、ユーザーとコースの間に直接の関係はありません
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に続いてGroup
とCourse
の間でコースを取得する必要があります。
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')