Pergunta

Basta saber se existe uma maneira fácil de adicionar a funcionalidade para duplicar um existente listando na interface de administração?

Na entrada de dados que temos correr em uma situação onde um monte de itens de compartilhar dados genéricos com outro item, e para poupar tempo que seria muito bom para duplicar rapidamente uma lista existente e só alterar os dados alterados. Usando uma estrutura melhor modelo seria uma forma de reduzir a duplicação dos dados, mas pode haver situações em que as necessidades de dados duplicados para ser mudado de forma individual no futuro.

Foi útil?

Solução

Você pode salvar como por apenas permitindo adicionar esta a sua ModelAdmin:

save_as = True

Este substitui o "Salvar e adicionar outro" botão com um "Salvar como" botão. "Salvar como" significa que o objeto será guardado como um novo objeto (com um novo ID), em vez do objeto de idade.

Outras dicas

Há uma solução melhor (mas não built-in) aqui:

https://github.com/RealGeeks/django-modelclone

A partir de sua README:

Django Admin tem uma característica save_as que adiciona um novo botão ao seu Mudar página para salvar uma nova instância do objeto.

Eu não gosto da maneira como esse recurso funciona, porque você vai salvar um cópia idêntica do objeto original (se você não obter a validação erros) Assim que você clicar nesse link, e se você se esquecer de fazer a pequenas mudanças que você queria no novo objeto que você vai acabar com um duplicar do objeto existente.

Por outro lado, o Django-modelclone oferece uma visão intermediária, que basicamente pré-preenche o formulário para você. Então, você pode modificar e salve uma nova instância. Ou simplesmente ir embora sem efeitos colaterais.

Você também pode aplicar este método: https://stackoverflow.com/a/4054256/7995920

No meu caso, com restrição exclusiva no campo 'nome', isso funciona de ação, e pode ser solicitado de qualquer forma:


def duplicate_jorn(modeladmin, request, queryset):
    post_url = request.META['HTTP_REFERER']

    for object in queryset:
        object.id = None
        object.name = object.name+'-b'
        object.save()

    return HttpResponseRedirect(post_url)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top