Si par « chaque fois qu'un nouvel objet Hero est créé » vous voulez dire « chaque fois qu'un enregistrement Hero est créé dans la base de données », alors non, vous ne voulez pas le faire dans la méthode __init__
, puisque cela est appelé à chaque fois qu'un objet Héros est créé en Python, y compris lorsque vous venez d'obtenir un enregistrement existant de la base de données. Pour faire ce que vous voulez, vous pouvez utiliser le post_save signal de Django, en vérifiant dans le rappel de signal que le paramètre de mot-clé created
a la valeur True et en exécutant votre logique "on creation" si c'est le cas.
Alternativement, et plus simple et naturel dans certains cas, vous pouvez remplacer la méthode de Hero save()
comme suit:
def save(self, *args, **kwargs):
if not self.pk: # object is being created, thus no primary key field yet
self.name += " is a hero"
super(Hero, self).save(*args, **kwargs)
Notez que la méthode bulk_create
de Djagno sautera déclenchement soit le signal post-enregistrement ou en appelant save
.
Ce n'est presque jamais ce que vous voulez. Décrivez votre vrai problème. –
@ IgnacioVazquez-Abrams Je dois mettre à jour un autre modèle qui est basé sur l'entrée agrégée de ma classe 'Hero'. – Joey
@Joey Utilisez [signaux] (https://docs.djangoproject.com/fr/1.4/topics/signals/) à la place. – Dougal