Tengo un sitio de django con muchos modelos y formularios. Tengo muchos formularios y conjuntos de formularios personalizados y conjuntos de formularios en línea y validación personalizada y conjuntos de consultas personalizados. Por lo tanto, la acción de agregar modelo depende de los formularios que necesitan otras cosas, y el 'agregar modelo' en el administrador de django pasa por 500 desde un conjunto de consultas personalizado.
¿Hay alguna forma de deshabilitar la funcionalidad 'Agregar $ MODELO' para ciertos modelos?
Quiero /admin/appname/modelname/add/
dar un mensaje de error 404 (o un mensaje de error adecuado de "desaparecer"), no quiero que aparezca el botón "Agregar $ MODELNAME" /admin/appname/modelname
.
El administrador de Django proporciona una forma de deshabilitar las acciones de administrador (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions), sin embargo, la única acción para este modelo es 'delete_selected'. es decir, las acciones de administrador solo actúan en los modelos existentes. ¿Hay alguna forma de django esque para hacer esto?
fuente
Respuestas:
Es fácil, solo sobrecarga el
has_add_permission
método en tuAdmin
clase de esta manera:fuente
admin.site.register(MyModel, MyModelAdmin)
Agregar todo a laadmin.py
carpeta de aplicaciones de los modelos.obj
parámetro.Por defecto, syncdb crea 3 permisos de seguridad para cada modelo:
Si has iniciado sesión como administrador, obtienes TODO sin importar qué.
Pero si creas un nuevo grupo de usuarios llamado "Acceso general" (por ejemplo), entonces puede asignar SOLO los permisos CAMBIAR y ELIMINAR para todos sus modelos.
Entonces, cualquier usuario conectado que sea miembro de ese grupo no tendrá permiso de "Crear", nada relacionado con él se mostrará en la pantalla.
fuente
Creo que esto te ayudará ... el siguiente código debe estar en el archivo admin.py
Además de lo anterior publicado por
fuente
Simplemente copie el código de otra respuesta
En mi caso uso inline
en
service = formset.form.base_fields['service']
base_fields
es los campos definidos en el modelosi se define en el formulario, use:
product = formset.form.declared_fields['product']
ver también
fuente
base_fields
ydeclared_fields
son el hallazgo más importante que aprendí de este caso.Esta es una respuesta demasiado tardía; Simplemente publique esto como si alguien estuviera encontrando la misma solución.
En el archivo admin.py puede hacer lo siguiente:
Aquí, "readonly_fields" hace la magia. Gracias.
fuente