La mise en place:
- Je travaille sur une application Django qui permet aux utilisateurs de créer un objet dans la base de données, puis de revenir en arrière et de le modifier autant qu'ils le souhaitent.
- Le site d'administration de Django conserve un historique des modifications apportées aux objets via le site d'administration.
La question:
- Comment connecter mon application à l'historique des modifications du site d'administration afin de pouvoir consulter l'historique des modifications que les utilisateurs apportent à leur «contenu»?
from django.utils.encoding import force_unicode
pour 'force_unicode'Le journal de l'historique des modifications de l'administrateur est défini dans
django.contrib.admin.models
, et il existe unehistory_view
méthode dans laModelAdmin
classe standard .Cependant, ils ne sont pas particulièrement intelligents et assez étroitement liés à l'administrateur, vous feriez donc mieux de les utiliser simplement pour des idées et de créer votre propre version pour votre application.
la source
Je sais que cette question est ancienne, mais à partir d'aujourd'hui (Django 1.9), les éléments d'histoire de Django sont plus robustes qu'ils ne l'étaient à la date de cette question. Dans un projet en cours, j'avais besoin d'obtenir les éléments d'historique récents et de les placer dans une liste déroulante à partir de la barre de navigation. Voici comment je l'ai fait et c'était très simple:
Comme on le voit dans l'extrait de code ci-dessus, je crée un jeu de requêtes de base à partir du modèle LogEntry (django.contrib.admin.models.py est l'endroit où il se trouve dans django 1.9) et exclut les éléments où aucun changement n'est impliqué, en le triant par le temps d'action et ne montrant que les 20 derniers journaux. Je reçois également un autre article avec juste le décompte. Si vous regardez le modèle LogEntry, vous pouvez voir les noms de champs que Django a utilisés pour récupérer les données dont vous avez besoin. Pour mon cas spécifique, voici ce que j'ai utilisé dans mon modèle:
Lien vers l'image du produit final
la source
Pour ajouter à ce qui a déjà été dit, voici quelques autres ressources pour vous:
(1) J'ai travaillé avec une application appelée django-reversion qui `` se connecte '' à l'historique d'administration et y ajoute en fait. Si vous vouliez un exemple de code, ce serait un bon endroit pour regarder.
(2) Si vous décidez de lancer votre propre fonctionnalité d'historique, django fournit des signaux auxquels vous pouvez vous abonner pour que votre application gère, par exemple, post_save pour chaque objet d'historique. Votre code s'exécutait chaque fois qu'une entrée de journal d'historique était enregistrée. Doc: Signaux Django
la source
Exemple de code
Bonjour,
J'ai récemment piraté dans une certaine connexion à une vue "mise à jour" pour notre base de données d'inventaire de serveur. J'ai pensé que je partagerais mon code "exemple". La fonction qui suit prend l'un de nos objets "Serveur", une liste de choses qui ont été modifiées et un drapeau d'action ADDITION ou CHANGE. Cela simplifie un peu les choses où ADDITION signifie «a ajouté un nouveau serveur». Une approche plus flexible permettrait d'ajouter un attribut à un serveur. Bien sûr, il était suffisamment difficile de vérifier nos fonctions existantes pour déterminer si un changement avait réellement eu lieu, donc je suis assez heureux d'enregistrer de nouveaux attributs en tant que «changement».
la source