Eu tenho um site de django com muitos modelos e formulários. Eu tenho muitos formulários e conjuntos de formulários personalizados e inlineformsets e validação personalizada e conjuntos de consultas personalizados. Portanto, a ação add model depende de formulários que precisam de outras coisas, e o 'add model' no django admin passa de 500 a partir de um conjunto de consultas personalizado.
Existe alguma maneira de desativar a funcionalidade 'Adicionar $ MODELO' para determinados modelos?
Desejo /admin/appname/modelname/add/
fornecer uma mensagem de erro 404 (ou uma mensagem de erro adequada 'desapareça'). Não quero que o botão 'Adicionar $ MODELNAME' esteja em /admin/appname/modelname
exibição.
O administrador do Django fornece uma maneira de desativar as ações de administrador (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions), no entanto, a única ação para este modelo é 'delete_selected'. isto é, as ações administrativas atuam apenas nos modelos existentes. Existe alguma maneira django-esque de fazer isso?
fonte
Respostas:
É fácil, basta sobrecarregar o
has_add_permission
método em suaAdmin
classe da seguinte forma:fonte
admin.site.register(MyModel, MyModelAdmin)
Adicione tudo àadmin.py
pasta de aplicativos dos modelos.obj
parâmetro.Por padrão, o syncdb cria 3 permissões de segurança para cada modelo:
Se você está logado como administrador, você obtém TUDO não importa o quê.
Mas se você criar um novo grupo de usuários chamado "Acesso Geral" (por exemplo) , poderá atribuir SOMENTE as permissões CHANGE e DELETE para todos os seus modelos.
Então, qualquer usuário conectado que seja membro desse grupo não terá permissão "Criar", nada relacionado a ele será exibido na tela.
fonte
Eu acho que isso vai ajudar você .. o código abaixo deve estar no arquivo admin.py
Além disso, conforme publicado por
fonte
Basta copiar o código de outra resposta
No meu caso, eu uso inline
in
service = formset.form.base_fields['service']
base_fields
são os campos definidos no modelose definido no formulário, use:
product = formset.form.declared_fields['product']
Veja também
fonte
base_fields
edeclared_fields
são as descobertas mais importantes que aprendi neste caso.Esta é uma resposta muito atrasada; Basta postar isso como se alguém estivesse encontrando a mesma solução.
No arquivo admin.py, você pode fazer o seguinte:
Aqui, "readonly_fields" faz a mágica. Obrigado.
fonte