Django Models - проблема с использованием метода ManyToManyField add () - PullRequest
2 голосов
/ 11 марта 2009

У меня проблема с использованием метода add () ниже ...

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

Странно, но в строке print self.operators.values() отображаются правильные значения, однако при проверке записи в django admin администратор не был сохранен как оператор.

е.

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

Какая магия мне здесь нужна?

1 Ответ

3 голосов
/ 03 января 2010

Я случайно нашел этот вопрос, так что, возможно, он не актуален, но сначала вы должны сохранить 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()
...