2009-03-10 12 views
1

kaydetmeden önce bir ManyToManyField bir nesne ekleme eğer olmasalar da.Django Modelleri Şartlı takip amacı oldukça iştir gelmez

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

    # --- over ride methods ---- # 

    def save(self, **kwargs): 
     # this must be done to get a pk 
     super(JobRecord, self).save(**kwargs) 

     # which makes this comparison possible 
     if self.supervisor not in self.operators.__dict__: 
      self.operators.add(self.supervisor) 

     # it seems to get this far ok, but alas, the second save attempt 
     # does not seem to work! 
     print self.operators.values() 
     super(JobRecord, self).save(**kwargs) 

Uzmanlığınız için teşekkürler, 'uzman' olur!

+0

sadece rastgele bir kod inceleme yorumu. eğer() .se save() yöntemini eğer sizden sonra taşırsanız, ve sadece bir kez aramanız gerekecek. – monkut

cevap

2

Sen gözetmen operatörleri olup olmadığını kontrol etmek böyle bir şey yapabilirsiniz:

if self.operators.filter(id=self.supervisor.id).count() == 0: 

Ve birçok alanda birçok değiştirdikten sonra ikinci kez kazanmak için gerekmez. (Pek çok ilişki için çoğu kendi tabloda depolanır.)

+0

yarım yol var ... koşullu çalışmalar, henüz add() yöntemi oldukça çatlamaz mı? –

1

Tamam, aşağıdakileri yapmak için değiştirdim. Aslında, ya koşullu hile yapmak gibi görünüyor. Sorun şu ki, add() yöntemi benim için çalışmıyor. Aynı sorunu bende var.

+0

Eklemediğinden emin misin? Bir istisna var mı? Self.operators.all() öğesini yazdırmayı deneyin() –

+0

Çoktan çoğa api kullanımını gözden geçirmek isteyebilirsiniz: http://www.djangoproject.com/documentation/models/many_to_many/ –

0

. Bir django formu kullanıyorsanız, form kaydedildikten sonra çekinizi yapın ve sonra birçok kişiyi buraya ekleyin. Bu etrafında yapabileceğim tek yol buydu.