2009-03-11 9 views
2

Ich habe ein Problem unter der Add() Methode verwendet ...Django Models - Problem mit ManyToManyField hinzufügen() -Methode

class JobRecord(models.Model): 
    """JobRecord model""" 

    project    = models.ForeignKey(Project) 
    date    = models.DateField() 
    supervisor   = models.ForeignKey(User, related_name='supervisor_set') 

    operators   = models.ManyToManyField(User, related_name='operators_set', help_text='Include the supervisor as an operator here also.') 

    vehicles   = models.ManyToManyField(Vehicle, blank=True, null=True) 

    def __unicode__(self): 
     return u"%s - %s" % (self.project.name, self.date.strftime('%b %d')) 

    def save(self, **kwargs): 
     super(JobRecord, self).save(**kwargs) 
     if not self.operators.filter(pk=self.supervisor.pk): 
      self.operators.add(self.supervisor) 
      print self.operators.values() 

Seltsamerweise die print self.operators.values() Linie zeigt die korrekten Werte jedoch bei der Untersuchung der Aufnahme in Django Admin, der Supervisor wurde nicht als Operator gespeichert.

dh.

self.operators.add(self.supervisor) # fails to commit 

Welche Art von Magie brauche ich hier?

+0

Ich bin mit dem gleichen Problem. Ich habe sogar ein post_save Signal eingerichtet und konnte die add() Methode nicht erhalten. Keine der beiden Seiten von ManyToMany verwendet ihre Standardautonummer-ID. Ich frage mich, ob das etwas damit zu tun hat. –

Antwort

3

fand ich zufällig diese Frage vielleicht nicht aktuell ist, aber Sie sollten zuerst speichern self.supervisor:

def save(self, **kwargs): 
    super(JobRecord, self).save(**kwargs) 
    if not self.operators.filter(pk=self.supervisor.pk): 
     self.supervisor.save() 
     self.operators.add(self.supervisor) 
     print self.operators.values() 
Verwandte Themen