2012-07-04 13 views
5

Tworzę urządzenia dla uprawnień w Django. Mogę je załadować tak, jak jest to potrzebne. Jednak moje pytanie brzmi .. Czy chcę załadować urządzenie do tabeli auth_group_permissions, muszę określić group_id i permission_id, niestety urządzenia nie są najlepszym sposobem na obsłużenie tego. Czy jest to łatwiejszy sposób programowo? Aby uzyskać id dla konkretnych wartości i wypełnić je? Jak to zwykle się dzieje?Oprawy Django dla uprawnień

Odpowiedz

8

Właściwe rozwiązanie polega na utworzeniu uprawnień w ten sam sposób, w jaki robi to sama struktura.

Należy podłączyć do wbudowanego sygnału post_syncdb albo w module management.py lub management/__init__.py i utworzyć tam uprawnienia. Dokumentacja mówi, że jakiekolwiek prace wykonane w odpowiedzi na sygnał post_syncdb nie powinny wykonywać żadnych zmian w bazie danych, ale należy również zauważyć, że framework sam tworzy uprawnienia w odpowiedzi na ten sygnał.

Proponuję więc zapoznać się z aplikacją management module aplikacji django.contrib.auth, aby zobaczyć, jak należy to zrobić.

3

Przynajmniej Django> = 1.7, zaakceptowana odpowiedź nie jest już poprawną odpowiedzią z powodu wprowadzenia "naturalnych kluczy" jako opcji serializacji.

można przeczytać więcej na temat kluczy naturalnych w Django serialization documentation

Dokumentacja wyraźnie wymienia przypadek użycia kluczy naturalne jest, gdy ..

... obiekty są tworzone automatycznie przez Django podczas bazy danych proces synchronizacji, klucz podstawowy danej relacji nie jest łatwy do przewidzenia; będzie zależeć od tego, jak i kiedy wykonano migrację. Dotyczy to wszystkich modeli, które automatycznie generują obiekty, w tym w szczególności uprawnienia, grupy i użytkownika.

Więc dla konkretnego pytania dotyczące auth_group_permissions, by zrzucić swoje urządzenie przy użyciu następującej składni:

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

tabela auth_permissions musi być wyraźnie wyłączonych z flagą -e jako że tabela jest pusta komendą migrate i będą już mieć dane przed załadowaniem urządzeń.

Urządzenie to zostanie następnie załadowane w taki sam sposób, jak inne urządzenia