2016-03-31 1 views
0

Im un peu confus au sujet d'un marché M2M django, j'ai la question suivante:django M2M avec d'autres attributs

Chaque utilisateur peut a trop de compétences et par compétence à l'utilisateur doivent choisir le moment de l'expérience. Je veux dire, django-1 an, Heroku-3 ans, et comme ça, comment puis-je l'implémenter en django?

Mes modèles:

class Specialities(models.Model): 
    name = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.name 


class Experience(models.Model): 
    specialities = models.ManyToManyField('self',through='RegisterProfessional',symmetrical = False) 
    years = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.years 

class RegisterProfessional(models.Model): 
    id_document = models.OneToOneField(User) 
    specialities = models.ForeignKey(Specialities) 
    anios = models.ForeignKey(Experience) 

Comment puis-je fixer mon modèle pour y parvenir?

Répondre

2

Je vais essayer de le rendre aussi simple que possible:

class Speciality(models.Model): 
    name = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.name 


class User(models.Model): 
    specialities = models.ManyToManyField('self',through='RegisterProfessional',symmetrical = False) 


class RegisterProfessional(models.Model): 
    id_document = models.ForeignKey(User) 
    speciality = models.ForeignKey(Speciality) 
    years = models.CharField(max_length=100) 

    class Meta(object): 
     unique_together = ('id_document', 'speciality') 

Et pour l'utilisateur, si vous voulez dire l'utilisateur d'authentification django, there is a way to extend it easily pour pouvoir ajouter des spécialités directement au modèle User.

+0

merci pour votre réponse .. Voici où je suis confus, pourquoi FK dans la spécialité dans RegisterProfessional? Comment est-ce que je peux ajouter plus d'une spécialité dans RegisterProfessional? ... Dans l'admin du modèle d'utilisateur n'apparaît aucun champ. – dfrojas

+1

Il doit s'agir d'un FK, RegisterProfessional est la table de jointure qui établit la relation m2m entre 'User' et' Speciality'. Sur l'admin, vous devez utiliser TabularInline comme mentionné dans la documentation https://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-models et vous serez capable d'ajouter de nombreuses spécialités à un utilisateur. – Mounir