Witam, nie mam pomysłu i nie moge znaleźć pomysłu jak wyświetlić np. ostatnie 10 modyfikacji bazy danych bądź nowych wpisów. Chce po prostu zrobić liste ostatnich zmian od wejścia.
Przede wszystkim dokumentacja django (jedna z najlepszych dokumentacji jakie istnieją) - https://docs.djangoproject.com/en/dev/topics/db/queries/#limiting-querysets
Jeśli chcesz wyświetlić np. 10 ostatnich wpisów dodanych do tabeli Article
możesz to zrobić tak:
Article.objects.all().order_by('-id')[:10]
Z wyświetlaniem ostatnich zmodyfikowanych wpisów jest troszkę więcej kłopotu - sama tabela nie przechowuje takich informacji, więc tworząc ją musiałbyś w niej stworzyć pole, które zapamiętuje kiedy modyfikacja została dokonana, np. pole modified
tworzone w ten sposób:
modified = models.DateTimeField(auto_now=True, auto_now_add=True)
opis znajdziesz tutaj: https://docs.djangoproject.com/en/dev/ref/models/fields/#datetimefield
Jeśli tabela będzie już przechowywała datę modyfikacji, to wtedy możesz otrzymać 10 ostatnio zmodyfikowanych rekordów w taki sposób:
Article.objects.all().order_by('-modified')[:10]
Z tym, że chodzi mi o kilka tabel. Np. Dodanie komenatrza, dodanie posta, złożenie zamówienia, zarejstrowanie użytkownika, i chce ostatnich 10 wykonanych danych akcji.
Wyświetlać ostatnich dziesięć akcji (różnych dla różnych tabel) można, ale pod warunkiem, że sam gdzieś zapisujesz fakt ich zdarzenia. Takie informacje nie są przecież same z siebie zapisywane w bazie danych, więc jeśli się nie postarałeś o to, żeby były zapisywane to nic z tego...
Musiałbyś sam stworzyć tabelę, gdzie będą one zapisywane, ot w najprostszym przypadku mającą pola id i zdarzenie, a następnie postarać się, żeby przy wystąpieniu zdarzenia (modyfikacja, wstawienie, usunięcie rekordu w którejś z tabel) do niej był zapisywany np. ciąg dodanie komentarza
. W dopisywanie zdarzeń można rozwiązać na trzy sposoby:
- Sam w kodzie, który modyfikuje/zapisuje rekord dodajesz jednocześnie do tabeli zdarzenia zapis o tym zdarzeniu - trochę pracochłonne, masa niepotrzebnego kodu, łatwo się gdzieś "machnąć"
- Wykorzystując triggery/wyzwalacze w bazie danych - wtedy wykonanie jakiejś operacji na tabeli wywoła akcję dopisania zdarzenia do tabeli z poziomu samej bazy danych
- Wykorzystując djangowskie sygnały https://docs.djangoproject.com/en/dev/topics/signals/ podpinając pod nie odpowiednie działanie (zapis informacji o zdarzeniu) przy zapisie czy usunięciu rekordu z jakiejś tabeli
Dopiero w tym momencie mając gdzieś zapisane to dodanie komentarza, dodanie posta, złożenie zamówienia, zarejestrowanie użytkownika
możesz myśleć o ich wyświetleniu.
madmike napisał(a):
Wyświetlać ostatnich dziesięć akcji (różnych dla różnych tabel) można, ale pod warunkiem, że sam gdzieś zapisujesz fakt ich zdarzenia. Takie informacje nie są przecież same z siebie zapisywane w bazie danych, więc jeśli się nie postarałeś o to, żeby były zapisywane to nic z tego...
Musiałbyś sam stworzyć tabelę, gdzie będą one zapisywane, ot w najprostszym przypadku mającą pola id i zdarzenie, a następnie postarać się, żeby przy wystąpieniu zdarzenia (modyfikacja, wstawienie, usunięcie rekordu w którejś z tabel) do niej był zapisywany np. ciąg
dodanie komentarza
. W dopisywanie zdarzeń można rozwiązać na trzy sposoby:
- Sam w kodzie, który modyfikuje/zapisuje rekord dodajesz jednocześnie do tabeli zdarzenia zapis o tym zdarzeniu - trochę pracochłonne, masa niepotrzebnego kodu, łatwo się gdzieś "machnąć"
- Wykorzystując triggery/wyzwalacze w bazie danych - wtedy wykonanie jakiejś operacji na tabeli wywoła akcję dopisania zdarzenia do tabeli z poziomu samej bazy danych
- Wykorzystując djangowskie sygnały https://docs.djangoproject.com/en/dev/topics/signals/ podpinając pod nie odpowiednie działanie (zapis informacji o zdarzeniu) przy zapisie czy usunięciu rekordu z jakiejś tabeli
Dopiero w tym momencie mając gdzieś zapisane to
dodanie komentarza, dodanie posta, złożenie zamówienia, zarejestrowanie użytkownika
możesz myśleć o ich wyświetleniu.
Wchodząć na strone właśnie wpadłem na pomysł pierwszy ale jest pracochłonny więc skłoniłbym się do 2 i 3 punktru z tym, że nie za bardzo moge znaleźć jakieś praktyczne info o 2 punkcie a o punkcie 3 jutro poczytam