Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #24 - 25 kwietnia, 18:00, Białystok!
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: [Django] - przycisk w panelu admina wywołujący funkcję  (Przeczytany 493 razy)
« : 23:31 18/05/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 276


Proszę o radę. Nie mogę sobie poradzić z wstawieniem zwykłego przycisku, który wywoła dowolną funcję w panelu admina.

Funkcja może być taka:
Kod
def printer():
   print('Some text')
 

Przycisk dodałem w taki sposób (np. w app_index.html):
Kod
<form action="{% url 'admin:index' %}">
   <input type="submit" value="{% trans 'Another Button' %}"
name="_anotherbutton" />
</form>
 

Muszę jakos powalczyć z widokami i urlami, ale nie mogę sobie z tym kompletnie poradzić. Na stackoverflow.com otrzymałem taką radę:
Cytuj
So, you need to call your function from a view, and associate a URL with it, which your button calls.
ale dalej nie jestem w stanie ruszyć z miejsca. Może w rodzimym języku ktoś pomoże mi wykonać to arcytrudne zadanie?
Zapisane
« Odpowiedz #1 : 22:43 19/05/17 »
Aule Offline
Advanced Python User

Zobacz profil WWW
**

Reputacja: 10
Wiadomości: 161


Nie wiem czy jest to poprawne podejście i czy o to chodziło w poradzie ze stackoverflow ale można to zrobić np w taki sposób:
w szablonie powiedzmy mamy 3 przyciski
Kod
    <form method = 'post'>
    {% csrf_token %}
    <button type="submit" name='_arch'>Archiwum</button>
   </form>
 
 <form method = 'post'>
    {% csrf_token %}
    <button type="submit" name='_dzis'>Dzisiejsze</button>
</form>
 
<form method = 'post'>
    {% csrf_token %}
    <button type="submit" name='_jutro'>Przyszłe</button>
</form>
 
potem w widokach to definiujemy w normalny sposób tak jakbyśmy przesyłali formularz
Kod
if request.method == 'POST':
       if '_dzis' in request.POST:#przejscie dodanych dzisiejszych
           a =  Filter(request.GET, queryset=sample.objects.filter(dw=datetime.date.today()).order_by('godz'))
       elif '_jutro' in request.POST:#przejscie do danych przyszłych
           a = Filter(request.GET, queryset=sample.objects.filter(dw__gte = datetime.date.today()+datetime.timedelta(1)).order_by('godz'))
       elif '_arch'  in request.POST:#przejscie do danych w archiwum
           return redirect('archiwum')
 
Zapisane

« Odpowiedz #2 : 23:45 19/05/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 276


Cytuj
potem w widokach to definiujemy w normalny sposób tak jakbyśmy przesyłali formularz

Właśnie mam problem z widokami panelu admina. W ogóle nie mogę tego pojąć. W normalnej aplikacji mam plik views.py gdzie sobie sam tworzę widoki. Jeśli chodzi o admina nie mogę sobie z tym poradzić. Jak zmodyfikować np. widok podstawowy (index), albo wspomniany przeze mnie app_index? Mam wrażenie, że plączę się w podstawowych rzeczach, ale nic na to nie poradzę. Nie ogarniam tego i tyle...
Zapisane
« Odpowiedz #3 : 08:48 20/05/17 »
Rado Offline
Hello World!

Zobacz profil
*

Reputacja: 4
Wiadomości: 18


Panie Judymek Twoja kreatywność nie zna granic Duży uśmiech. Nie rozumiem koncepcji tego przycisku, dlaczego chcesz z zwykłego widoku robić jakiś przycisk do admina ?

Moja propozycja to zrobić zwykłe admin actions dla danego modelu i mieć to w panelu admina, a nie udostępniać userowi to z poziomu aplikacji.

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/actions/

To co chcesz zrobić to dla mnie ma sens tylko wtedy kiedy robisz własny panel administracyjny, tak przynajmniej ja to odbieram z treści Twojego posta. Może opisz coś wiecej na temat tego przycisku jaka to ma być koncepcja, bo naprawdę nie mogę tego pojąć.

Chyba, że chodzi Ci o takie przyciski, ale one także będą w adminie, a nie w templatce zwykłej aplikacji.

https://medium.com/@hakibenita/how-to-add-custom-action-buttons-to-django-admin-8d266f5b0d41

Jeśli nadal chesz zrobić to tak jak opisujesz to obawiam się, że to wyższa szkoła jazdy i musisz czekać dalej na odpowiedz  Język




Zapisane
« Odpowiedz #4 : 09:20 20/05/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 276


Cytuj
Może opisz coś wiecej na temat tego przycisku jaka to ma być koncepcja

Chciałbym dodać przycisk, który wywoła funkcję sprawdzenia wszystkich wpisów w bazie i dokona ich modyfikacji. Mam model strony, który posiada wartość grupa(np. grupa "PREMIUM"). Po 30 dniach od utworzenia rekordu aplikacja ma zmienić grupę na "PODSTAWOWY"). Będę to chciał robić za pomocą CRON jobs. Chciałem się nauczyć odpalenia takiej funkcji bezpośrednio z panelu zadmina, za pomocą przycisku, który wywoła funkcję (sprawdzi czy data obecna jest większa od wartości date_end, która oznacza datę wygaśnięcia wpisu premium i dokona modyfikacji obiektu). Może faktycznie wszystko zagmatwałem (coś nie idzie mi to Django)...

Tak w skrócie. Przycisk ma być dostępny tylko dla administratora z poziomu panelu admina. Ma tylko wywołać funkcję.
Cytuj
Chyba, że chodzi Ci o takie przyciski, ale one także będą w adminie, a nie w templatce zwykłej aplikacji.
Tak - chodzi mi o coś takiego.
Zapisane
« Odpowiedz #5 : 10:08 20/05/17 »
Aule Offline
Advanced Python User

Zobacz profil WWW
**

Reputacja: 10
Wiadomości: 161


Nie wiem czy nie szybciej byłoby zrobić normalny widok i ograniczyć go tylko dla super usera i w nim umieścić to co chcesz
Zapisane

Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2017 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot