2009-03-11 4 views
2

У меня есть проблемы с помощью метода Add() ниже ...Django модели - Проблема с использованием ManyToManyField добавить метод()

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, супервизор не был сохранен как оператор.

ie.

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

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

+0

У меня та же проблема. Я даже настроил сигнал post_save и не смог использовать метод add(). Ни одна из сторон моего ManyToMany не использует свой идентификатор autonumber по умолчанию. Интересно, имеет ли это какое-либо отношение к этому. –

ответ

3

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