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_permissionmétodo en tuAdminclase de esta manera:fuente
admin.site.register(MyModel, MyModelAdmin)Agregar todo a laadmin.pycarpeta de aplicaciones de los modelos.objpará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_fieldses los campos definidos en el modelosi se define en el formulario, use:
product = formset.form.declared_fields['product']ver también
fuente
base_fieldsydeclared_fieldsson 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