1

I'm trying to build an e-learning platform

I have users (Utilisateur) who can take several courses ,each course have several modules and a module can be in several courses

A user can be a student or teacher or admin, a student is "managed" by a teacher or several and a teacher can also be managed by a teacher (if he is a researcher) ,teachers are managed by admins

I'm not familiar with many_to_many concept, please correct me

This is my django models :

class Utilisateur(models.Model):
    user       = models.OneToOneField(User)
    role       = models.CharField(choices=ROLES,blank=False,max_length=50)
    managed_by = models.ManyToManyField('self', 
                                         related_name='managers',
                                         symmetrical=False, 
                                         blank=True)
    course     = models.ManyToManyField('Course')   #can I do it? (question 2)
    module     = models.ManyToManyField('Module', through='UtilisateurModule')


class Course(models.Model):
    titre  = models.CharField(blank=False,max_length=100)

class Module(models.Model):
    titre     = models.CharField(blank=False,max_length=100)
    course    = models.ManyToManyField(Course, through='ModuleCourse')

class ModuleCourse (models.Model):
    module = models.ForeignKey(Module)
    course = models.ForeignKey(Course)
    order  = models.IntegerField(blank=False)   


class UtilisateurModule (models.Model):
    user   = models.ForeignKey(Utilisateur)
    module = models.ForeignKey(Module)
    score  = models.IntegerField(blank=False)

My questions :

1. How to get the scores of a user by module and display them by course, like that :

-Course A

 *Module 1 

   score : 5

 *module 2 :

  score : 8

 ...

-Course B

 *Module 1:

   score 7

 ....

2. I need to add a many to many relationship between course and user because I wouldnt tell which course affected to which user only by affecting a module to him knowing that the module can belong to several courses, is it correct to add a course = models.ManyToManyField('Course') in Utilisateur?

4

2 回答 2

0

解决了

1-这就是我设法做到的方式:

    course = Utilisateur.objects.get(user=current_user).course.all() 

    course_sets = []
    for p in course:
        modules = Module.objects.filter(course__id=p.pk).order_by('modulecourse__order') 
        modules_sets = []
        for m in modules:                
            score = UtilisateurModule.objects.get(module=m,utilisateur=current_user)
            modules_sets.append((m, score))
        course_sets.append((p, modules_sets)) 

2-我添加course = models.ManyToManyField('Course')Utilisateur

然后添加了一些手动验证,即每当 A 课程受到用户影响时,该课程中的模块也会受到相同用户的影响UtilisateurModule

于 2013-09-11T16:35:18.363 回答
0

广告 2。是的,它是正确的。但是您必须记住,当用户开始一些课程时,其中一些课程具有相同的模块,您只能为这些模块存储一个分数。为了防止这种情况,您需要创建这样的类:

class UtilisateurCourseModule(models.Model):
    user   = models.ForeignKey(Utilisateur)
    course = models.ForeignKey(Course)
    module = models.ForeignKey(Module)
    score = models.IntegerField()

广告 1。

for c in user.course.all(): # why course not courses?
    print "Course {}".format(c.titre)
    for m in c.module_set.all().order_by('modulecourse__order')
        print "Module {}".format(m.titre)
        try:
            print 'score: ', UtilisateurModule.objects.get(user=user,module=m).score
        catch UtilisateurModule.DoesNotExits:
            print 'score: ---'
于 2013-08-31T17:51:08.137 回答