tutorial template superusuario modelos girls crear actions python django django-admin

python - template - modelos en django



Administrador de Django: deshabilita la acción ''Agregar'' para un modelo específico (3)

De forma predeterminada, syncdb crea 3 permisos de seguridad para cada modelo:

  1. Crear (también conocido como agregar)
  2. Cambio
  3. Borrar

Si has iniciado sesión como administrador, obtienes TODO lo que pase .

Pero si crea un nuevo grupo de usuarios llamado "Acceso general" (por ejemplo) , puede asignar SÓLO los permisos de CAMBIO y SUPRESIÓN para todos sus modelos.

Entonces, cualquier usuario conectado que sea miembro de ese grupo no tendrá permiso de "Crear", no se mostrará nada relacionado con él en la pantalla.

Tengo un sitio django con muchos modelos y formularios. Tengo muchos formularios personalizados y conjuntos de formularios, formularios en línea y validación personalizada y conjuntos de consulta personalizados. Por lo tanto, la acción de agregar modelo depende de formas que necesitan otras cosas, y el ''modelo agregar'' en el administrador de django a través de un 500 desde un conjunto de consulta personalizado.

¿Hay alguna forma de desactivar la funcionalidad ''Agregar $ MODELO'' para ciertos modelos?

Quiero /admin/appname/modelname/add/ para dar un 404 (o un mensaje de error adecuado para ''irse''), no quiero que el botón ''Add $ MODELNAME'' esté en la vista de /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 ''eliminar_selected''. es decir, las acciones de administración solo actúan en modelos existentes. ¿Hay alguna forma django-esque para hacer esto?


Es fácil, simplemente sobrecarga el método has_add_permission en tu clase de administración así:

class MyAdmin(admin.ModelAdmin): def has_add_permission(self, request): return False


Esta es una respuesta demasiado tardía; Solo publica esto como si alguien encontrara la misma solución.

En el archivo admin.py puede hacer lo siguiente:

class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = ''__all__'' class MyModelAdmin(admin.ModelAdmin): form = QuestionTrackAdminForm list_display = [''title'', ''weight''] readonly_fields = [''title'', ''weight''] admin.site.register(MyModel, MyModelAdmin)

Aquí, "readonly_fields" hace la magia. Gracias.