2012-07-04 26 views
5

Estoy creando accesorios para permisos en Django. Puedo cargarlos de la manera que se necesita. Sin embargo, mi pregunta es ... por ejemplo, quiero cargar un accesorio para la tabla auth_group_permissions, necesito especificar un group_id y un permission_id, lamentablemente los accesorios no son la mejor manera de manejar esto. ¿Hay alguna manera más fácil de hacer esto programáticamente? ¿De modo que pueda obtener el id para valores particulares y completarlos? ¿Cómo se hace esto normalmente?accesorios Django para permisos

Respuesta

8

La solución adecuada es crear los permisos de la misma manera que el marco.

Debe conectarse a la señal incorporada post_syncdb ya sea en el módulo management.py o management/__init__.py y cree los permisos allí. La documentación dice que cualquier trabajo realizado en respuesta a la señal post_syncdb no debe realizar ninguna modificación de la base de datos, pero también debe tener en cuenta que la propia estructura crea los permisos en respuesta a esta señal.

Así que le sugiero que eche un vistazo a la aplicación management module de la django.contrib.auth para ver cómo se supone que debe hacerse.

3

Al menos Django> = 1.7, la respuesta aceptada ya no es la respuesta correcta debido a la introducción de "claves naturales" como una opción de serialización.

Puede leer más acerca de las claves naturales en el Django serialization documentation

La documentación menciona explícitamente el caso de uso de claves naturales siendo cuando ..

... objetos son creados automáticamente por Django en la base de datos proceso de sincronización, la clave principal de una relación dada no es fácil de predecir; dependerá de cómo y cuándo se ejecutó la migración. Esto es cierto para todos los modelos que generan objetos automáticamente, especialmente Permiso, Grupo y Usuario.

Así que para su pregunta específica, con respecto auth_group_permissions, que le volcar su aparato utilizando la siguiente sintaxis:

python manage.py dumpdata auth --natural-foreign --natural-primary -e auth.Permission

La tabla auth_permissions debe ser excluido explícitamente con la bandera -e como la tabla se llena por el comando migrate y ya tendrá datos antes de cargar los accesorios.

Este dispositivo se cargará entonces de la misma manera que cualquier otro dispositivo

Cuestiones relacionadas