2012-07-04 20 views
5

Sto creando dispositivi per permessi in Django. Sono in grado di caricarli nel modo in cui è necessario. Tuttavia, la mia domanda è ... voglio caricare un dispositivo per il tavolo auth_group_permissions, ho bisogno di specificare un group_id e un permission_id, purtroppo i dispositivi non sono il modo migliore per gestirlo. C'è un modo più semplice per farlo a livello di programmazione? In modo che io possa ottenere il id per valori particolari e averli compilati? Come si fa normalmente?Infissi Django per autorizzazioni

risposta

8

La soluzione corretta consiste nel creare le autorizzazioni nello stesso modo in cui opera il framework stesso.

È necessario connettersi al segnale post_syncdb integrato nel modulo management.py o management/__init__.py e creare le autorizzazioni lì. La documentazione dice che qualsiasi lavoro eseguito in risposta al segnale post_syncdb non dovrebbe eseguire alcuna modifica al database, ma dovresti anche notare che il framework stesso crea le autorizzazioni in risposta a questo segnale.

Quindi suggerisco di dare un'occhiata allo management module dell'applicazione django.contrib.auth per vedere come dovrebbe essere fatto.

3

Almeno Django> = 1,7, la risposta accettata non è più la risposta corretta a causa dell'introduzione di "chiavi naturali" come opzione di serializzazione.

Si può leggere di più su chiavi naturale nel Django serialization documentation

La documentazione cita esplicitamente il caso d'uso per le chiavi naturali essere quando ..

... oggetti vengono creati automaticamente da Django durante il database processo di sincronizzazione, la chiave primaria di una determinata relazione non è facile da prevedere; dipenderà da come e quando è stata eseguita la migrazione. Questo vale per tutti i modelli che generano automaticamente oggetti, in particolare Autorizzazione, Gruppo e Utente.

Quindi per la vostra domanda specifica, per quanto riguarda auth_group_permissions, si dovrebbe uscire il vostro dispositivo utilizzando la seguente sintassi:

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

La tabella auth_permissions deve essere esplicitamente esclusa con la bandiera -e come quel tavolo è popolato tramite il comando migrate e avrà già dati prima di caricare i dispositivi.

Questo dispositivo verrà quindi caricato allo stesso modo di qualsiasi altro dispositivo

Problemi correlati