2016-03-31 15 views
0

Im ein wenig verwirrt über eine M2M mit django, habe ich folgendes Problem:M2M django mit mehreren Attributen

Jeder Benutzer kann zu viele Fähigkeiten und pro Geschicklichkeit der Benutzer die Zeit der Erfahrung zu wählen. Ich meine, Django-1 Jahr, Heroku-3 Jahre, und so weiter, wie kann ich das im Django umsetzen?

Meine Modelle:

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) 

Wie kann ich mein Modell zu beheben, das zu erreichen?

Antwort

2

Ich werde versuchen, es so einfach wie möglich zu machen:

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

Und für Benutzer, wenn Sie die django-Authentifizierung Benutzer bedeuten, there is a way to extend it easily der Lage sein, Spezialitäten direkt zum User Modell hinzuzufügen.

+0

danke für Ihre Antwort .. Hier ist, wo ich verwirrt, warum FK in speciality in RegisterProfessional? Wie kann ich mehr als eine Spezialität in RegisterProfessional hinzufügen? ... Im Admin des Benutzermodells erscheint kein Feld. – dfrojas

+1

Es muss ein FK sein, RegisterProfessional ist die Join-Tabelle, die die m2m-Beziehung zwischen "User" und "Speciality" herstellt. Auf dem Admin müssen Sie 'TabularInline' verwenden, wie in der Dokumentation https://docs.djangoproject.com/de/dev/ref/contrib/admin/#working-with-many-to-many-models erwähnt und Sie werden in der Lage, einem Benutzer viele Spezialitäten hinzuzufügen. – Mounir