ci-dessous ne fonctionne pas tout à fait, son but est:modèles Django - ajouter conditionnellement un objet à un ManyToManyField avant d'enregistrer
À sauver, vérifier l'existence de « superviseur » dans les « opérateurs », et l'ajouter eux aussi sinon.
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)
Merci pour votre expertise, «expert»!
juste un commentaire de révision de code aléatoire. Si vous déplacez votre méthode super(). save() après votre if, et dedent, vous n'aurez plus qu'à l'appeler une seule fois. – monkut