J'ajoute des champs date_added et date_modified à un tas de modèles courants dans mon projet actuel. Je sous-classe models.Model et ajoute les champs appropriés, mais je veux ajouter un comportement d'enregistrement automatisé (ie: chaque fois que quelqu'un appelle MyModel.save(), le champ date_modified est mis à jour.) Je vois deux approches: surcharger la méthode save() ou l'ajout d'un gestionnaire de signal pre_save dans la classe de base abstraite.Meilleure façon d'ajouter du datum_added commun, date_modified à de nombreux modèles dans Django
class CommonData(models.Model):
date_added = models.DateTimeField(default=datetime.datetime.today,null=False,blank=False)
date_modified = models.DateTimeField(default=datetime.datetime.today,null=True,blank=True)
# register a handler for the pre_save to update date_modified
def pre_save_handler(sender, **kwargs):
date_modified = datetime.datetime.today
def __init__():
pre_save.connect(pre_save_handler, sender=self)
ou
class CommonData(models.Model):
date_added = models.DateTimeField(default=datetime.datetime.today,null=False,blank=False)
date_modified = models.DateTimeField(default=datetime.datetime.today,null=True,blank=True)
# overriding save
def save(force_insert=False,force_update=False):
date_modified = datetime.datetime.now
return models.Model.save(force_insert, force_update)
Je suis nouveau à Django et Python et je me demandais quelle approche était plus « django »? Ce qui est plus efficace? qui est le "bon" moyen de le faire?
merci prometheus, je n'étais pas au courant des extensions de commande. Je coeur python/django ... cependant, il y a plusieurs façons de faire les choses! – Deano