how to model a reflexive many to many relationship?

176 views
Skip to first unread message

slim

unread,
Aug 26, 2013, 7:06:24 AM8/26/13
to django...@googlegroups.com
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

this is my conception :


I'm not familiar with many_to_many and through 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', through='UtilisateurRelationship', symmetrical=False, blank=True)
        
            
class UtilisateurRelationship(models.Model):
    managed = models.ForeignKey(Utilisateur)
    manager = models.ForeignKey(Utilisateur)
    
    
               
class Course(models.Model):
    titre  = models.CharField(blank=False,max_length=100)
    
class ModuleCourse (models.Model):
    module = models.ForeignKey(Module)
    course = models.ForeignKey(Course)
    order  = models.IntegerField(blank=False)   
        
class Module(models.Model):
    titre     = models.CharField(blank=False,max_length=100)
    belong_to = models.ManyToManyField(Course, through='ModuleCourse')
    
class UtilisateurModule (models.Model):
    user   = models.ForeignKey(Utilisateur)
    module = models.ForeignKey(Module)
    score  = models.IntegerField(blank=False)
    
  

Wissal Wbc

unread,
Aug 28, 2013, 7:25:31 AM8/28/13
to django-users
This is my progress so far :



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 parcours = models.ManyToManyField('Parcours') in Utilisateur?




2013/8/26 slim <wissal.kh...@gmail.com>

--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/SCS2oMa0P-M/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.

slim

unread,
Aug 28, 2013, 7:26:49 AM8/28/13
to django...@googlegroups.com

This is my progress so far :

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 parcours = models.ManyToManyField('Parcours') in Utilisateur?

Help me please

Thanks
Reply all
Reply to author
Forward
0 new messages