A configuração:
- Estou trabalhando em um aplicativo Django que permite aos usuários criar um objeto no banco de dados e depois voltar e editá-lo tanto quanto desejarem.
- O site de administração do Django mantém um histórico das mudanças feitas nos objetos através do site de administração.
A questão:
- Como conectar meu aplicativo ao histórico de alterações do site de administração para que eu possa ver o histórico de alterações que os usuários fazem em seu "conteúdo"?
django
django-models
django-admin
Akdom
fonte
fonte
from django.utils.encoding import force_unicode
para 'force_unicode'O registro do histórico de alterações do administrador é definido em
django.contrib.admin.models
e há umhistory_view
método naModelAdmin
classe padrão .No entanto, eles não são particularmente inteligentes e estão intimamente ligados ao administrador, então talvez seja melhor usá-los apenas para ter ideias e criar sua própria versão para seu aplicativo.
fonte
Eu sei que esta questão é antiga, mas a partir de hoje (Django 1.9), os itens de história do Django são mais robustos do que eram na data desta questão. Em um projeto atual, precisei obter os itens de histórico recentes e colocá-los em uma lista suspensa da barra de navegação. Foi assim que fiz e foi muito direto:
Como visto no trecho de código acima, estou criando um queryset básico do modelo LogEntry (django.contrib.admin.models.py é onde ele está localizado no django 1.9) e excluindo os itens onde nenhuma mudança está envolvida, ordenando-o por o tempo de ação e mostrando apenas os últimos 20 registros. Também estou recebendo outro item apenas com a contagem. Se você olhar o modelo LogEntry, poderá ver os nomes dos campos que o Django usou para recuperar os dados de que você precisa. Para o meu caso específico, aqui está o que usei no meu modelo:
Link para a imagem do produto final
fonte
Para complementar o que já foi dito, aqui estão alguns outros recursos para você:
(1) Tenho trabalhado com um aplicativo chamado django-reversion que 'se conecta' ao histórico de administração e realmente adiciona a ele. Se você quisesse algum código de amostra, seria um bom lugar para procurar.
(2) Se você decidiu lançar sua própria funcionalidade de histórico, o django fornece sinais que você pode assinar para ter seu aplicativo manipulado, por exemplo, post_save para cada objeto de histórico. Seu código seria executado sempre que uma entrada de registro de histórico fosse salva. Doc: sinais do Django
fonte
Código de exemplo
Olá,
Recentemente, hackeei alguns registros para uma visualização de "atualização" do nosso banco de dados de inventário do servidor. Achei que deveria compartilhar meu código de "exemplo". A função a seguir pega um de nossos objetos "Servidor", uma lista de coisas que foram alteradas e um action_flag de ADDITION ou CHANGE. Isso simplifica um pouco as coisas, onde ADIÇÃO significa "adicionado um novo servidor". Uma abordagem mais flexível permitiria adicionar um atributo a um servidor. Claro, foi suficientemente desafiador auditar nossas funções existentes para determinar se uma mudança realmente ocorreu, então estou feliz o suficiente para registrar novos atributos como uma "mudança".
fonte