Mam witrynę django z wieloma modelami i formularzami. Mam wiele niestandardowych formularzy i zestawów formularzy oraz zestawów formularzy inline i niestandardowych walidacji i niestandardowych zestawów zapytań. Dlatego akcja dodawania modelu zależy od formularzy, które wymagają innych rzeczy, a „dodaj model” w panelu administracyjnym django za pośrednictwem 500 z niestandardowego zestawu zapytań.
Czy mimo wszystko można wyłączyć funkcję „Dodaj $ MODEL” dla niektórych modeli?
Chcę /admin/appname/modelname/add/
podać kod 404 (lub odpowiedni komunikat o błędzie „odejdź”), nie chcę, aby przycisk „Dodaj $ MODELNAME” był /admin/appname/modelname
widoczny.
Administrator Django zapewnia sposób na wyłączenie działań administratora (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disecting-actions), jednak jedyną akcją dla tego modelu jest „delete_selected”. tj. działania administracyjne działają tylko na istniejących modelach. Czy jest na to sposób w stylu django?
źródło
Odpowiedzi:
To proste, po prostu przeładuj
has_add_permission
metodę w swojejAdmin
klasie w następujący sposób:źródło
admin.site.register(MyModel, MyModelAdmin)
Dodaj wszystko doadmin.py
folderu aplikacji modeli.obj
podawania parametrów.Domyślnie syncdb tworzy 3 uprawnienia bezpieczeństwa dla każdego modelu:
Jeśli jesteś zalogowany jako Administrator, otrzymasz WSZYSTKO bez względu na wszystko.
Ale jeśli utworzysz nową grupę użytkowników o nazwie „Dostęp ogólny” (na przykład) , możesz przypisać TYLKO uprawnienia ZMIANA i USUŃ wszystkim swoim modelom.
Wtedy każdy zalogowany użytkownik będący członkiem tej grupy nie będzie miał uprawnienia „Utwórz”, nic związanego z nim nie będzie wyświetlane na ekranie.
źródło
Myślę, że to ci pomoże ... poniższy kod musi być w pliku admin.py
Oprócz powyższego opublikowanego przez
źródło
Po prostu skopiuj kod z innej odpowiedzi
W moim przypadku używam inline
w
service = formset.form.base_fields['service']
base_fields
to pola zdefiniowane w modelujeśli zdefiniowano w formularzu, użyj:
product = formset.form.declared_fields['product']
Zobacz też
źródło
base_fields
ideclared_fields
są najważniejszym odkryciem, jakiego nauczyłem się w tej sprawie.To jest zbyt opóźniona odpowiedź; Po prostu opublikuj to tak, jakby ktoś szukał tego samego rozwiązania.
W pliku admin.py możesz wykonać następujące czynności:
Tutaj „readonly_fields” robi magię. Dzięki.
źródło