[afpy/django] django-admin - insert lors d'un update

Sébastien Corbin seb.corbin at gmail.com
Mer 17 Mai 16:03:45 CEST 2017


Hello Olivier,

Bienvenue dans la communauté, je suis assez neuf également, et comme dans tout framework, j'ai pris
pour réflexe de ne pas réinventer la roue et de réutiliser des packages maintenus et testés par la communauté.

Pour t'aider dans cette recherche, je te conseille le site djangopackages.org qui regroupe en sujet et compare les différents packages.
Pour ton cas, regarde du côté de https://djangopackages.org/grids/g/model-audit <https://djangopackages.org/grids/g/model-audit>, ainsi tu trouveras django-reversion (celui-ci se sert des signaux django pour détecter les changements).

Bon courage,

--
Sébastien Corbin

> On 17 May 2017, at 15:54, Olivier Lange <olange81 at gmail.com> wrote:
> 
> Hello aux participants,
> 
> Neo venu sur Django, et Python, après quelques années de dev sur php, j'ai enfin décidé de sauter le pas, et de m'attaquer à Python, et du coup django, qui me semble un projet mature.
> 
> Vous risquez donc de me voir poser plein de questions, le temps de me former, et je vous remercie de votre patience ;)
> 
> Première question, dont je n'arrive pas a trouver la réponse "simplement". J'ai activé django admin, crer une apps, avec son model, et activer la configuration des tables dans Django admin. Jusque la, tout va bien.
> 
> Dans mon model, j'ai 4 tables, 2 principales, et 2 qui me servent à historiser mes modifications. J'ai en effet besoin de savoir qui (user) à modifier quoi (valeur avant/après) et quand (user) sur mes tables, pour des raisons de tracabilité.
> 
> Une idée de comment je peux le faire? L'idée serait que lorsque j'ai un update sur la table, je puisse faire un insert sur une autre table. Je pourrais le faire via des trigger en Mysql, mais je me dit qu'il y a peut etre une solution directement avec Django?
> 
> Mon model (qui doit parler de lui même):
> 
> class Trunks(models.Model):
>     idTrunk = models.CharField(max_length=20,)
>     name = models.CharField(max_length=200)
>     ip_registrat = models.CharField(max_length=200)
>     mdp = models.CharField(max_length=50)
>     signal_type = models.CharField(max_length=50)
>     nbr_can_tot = models.IntegerField(default=0)
>     nbr_can_in = models.IntegerField(default=0)
>     nbr_can_out = models.IntegerField(default=0)
>     ndi = models.CharField(max_length=20)
> 
>     def __str__(self):
>         return '%s (%s)' % (self.name, self.idTrunk)
> 
> class Trunk_modif(models.Model):
>     date_modif = models.DateTimeField('date published')
>     user = models.CharField(max_length=20)
>     champ = models.CharField(max_length=20)
>     old_value = models.CharField(max_length=200)
>     new_value = models.CharField(max_length=200)
>     trunk_ref = models.ForeignKey(Trunks)
> 
> class number(models.Model):
>     trunk_ref = models.ForeignKey(Trunks)
>     number = models.CharField(max_length=20)
>     insee = models.CharField(max_length=10)
>     redirect = models.CharField(max_length=20)
> 
>     def __str__(self):
>         return '%s' % (self.number)
> 
> class number_modif(models.Model):
>     date_modif = models.DateTimeField('date published')
>     user = models.CharField(max_length=20)
>     champ = models.CharField(max_length=20)
>     old_value = models.CharField(max_length=200)
>     new_value = models.CharField(max_length=200)
>     number_ref = models.ForeignKey(number)
> 
> 
> 
> Merci.
> Olivier
> _______________________________________________
> django mailing list
> django at lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.afpy.org/pipermail/django/attachments/20170517/c5a63e3e/attachment-0001.html>
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: signature.asc
Type: application/pgp-signature
Taille: 455 octets
Desc: Message signed with OpenPGP
URL: <http://lists.afpy.org/pipermail/django/attachments/20170517/c5a63e3e/attachment-0001.sig>


Plus d'informations sur la liste de diffusion django