2012-05-16 8 views
0

Im travaillant dans deux modèles ralated par plusieurs à plusieurs, voici le code correspondant:modèle django question propre

class Curso(models.Model): 
    horarios = models.ManyToManyField(Horario, related_name = 'cursos') 
    ... 
    def clean(self): 
     ... 
     self.horarios.all() 
    def save(self,*args,**kwargs): 
     self.full_clean() 
     ... 

Horarios a déjà été défini, maintenant, quand je tente de créer un de curso dans l'interface admin i obtenir une erreur indiquant self.horarios.all():

'Curso' instance needs to have a primary key value before a many-to-many relationship can be used. 

Et il est logique car il n'a pas été enregistré, donc mon problème est, comment puis-je accéder à la valeur de horarios dans la Curso instance actuelle qui est en cours d'enregistrement ?.

merci à l'avance

+0

Ne serait pas la Le modèle Horario a sa propre méthode propre? Pourquoi auriez-vous besoin de travailler avec la méthode Curso clean? – jdi

+0

@jdi horario = horaire, j'ai besoin d'horario pour ne pas être présent sur une instance de Curso en même temps, c'est comme ça que je les valide, en passant par-dessus. – loki

+0

Copie possible: http://stackoverflow.com/questions/6090859/django-instance-needs-to-have-a-primary-key-value-before-a-many-to-many-relatio – jdi

Répondre

2

L'erreur semble assez simple pour moi - vous ne pouvez pas appeler un ManyToMany devant un objet est enregistré.

Vous pouvez reproduire l'erreur: Curso().horarios

Il est clair que vous ne pouvez pas être en train de faire la validation sur les relations qui ne peuvent pas exister, si simplement envelopper votre appel dans un if self.pk

if self.pk: 
    self.horarios.all()