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: PyData Warsaw 2017, 19-20 października - konferencja Data Science
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: [Django] - Przeniesienie obiektu do innej tabeli  (Przeczytany 418 razy)
« : 22:11 16/05/17 »
gadacz Offline
Advanced Python User

Zobacz profil
**

Reputacja: 8
Płeć: Mężczyzna
Wiadomości: 130


Cześć,

prawie świętowałem, ale niestety wyłączenie wyświetlania w templatce elementu powoduje problemy z paginacją.

Problem jest taki.
Mam model, w którym jest BooleanField.
Przy zaznaczeniu tego pola, wpis dostaje "flagę", że jest w archiwum i na głównej liście się nie wyświetla.
Takie coś działa, ale źle, bo paginacja pokazuje łączną ilość elementów, a ten jest tylko niewidoczny, ale "zliczany".

Jak zrobić taki zabieg, aby jeśli pole archiwum zwróci wartość True, to zostanie ten wpis przeniesiony do innej tabeli? I wtedy ta tabela będzie mieć swój widok.

Albo jeszcze inaczej, zaznaczenie pola spowoduje jego usunięcie, i utworzenie kopii dla/w nowym modelu i innej tabeli?

Ogólne założenie jest takie, że zaznaczenie pola "archiwum" usunie element w ListView elementu, a następnie chciałbym te listę wyświetlić(w innym widoku?) i ew, odwrócić ten proces.

Nie wiem do końca jak do tego się zabrać.
Za pomoc z góry dzięki!

Mam nadzieję, że pokrętnie, ale dość zrozumiałe jest to co chciałbym osiągnąć Uśmiech
Zapisane

--
pozdrawiam
gadacz
« Odpowiedz #1 : 11:27 17/05/17 »
hydeparkk Offline
Hello World!

Zobacz profil
*

Reputacja: 13
Płeć: Mężczyzna
Wiadomości: 40


A nie łatwiejszym rozwiązaniem byłoby nadpisanie metody get_queryset w widoku i w zależności od parametru, który przyjmowałby tylko wartość true/false zwracanie wyników z tabeli z lub bez wpisów, które są archiwalne?

Kod
def get_queryset(self):
   param = sefl.request.query_params.get('archive', False)
   return Tabela.objects.filter(archive=param)
 

Nie powinno być wtedy problemów z paginacją i dodatkowo nie będziesz musiał tworzyć dodatkowych zapytań do bazy o usuwanie i dodawanie wpisów archiwalnych wpisów, a także łatwiejsze będzie przywrócenie takiego archiwalnego wpisu do "żywych" bo zmieni się tylko jego jedno pole.

Dawno nie pisałem nic w Django, więc kod nie do końca może być poprawny.
Zapisane
« Odpowiedz #2 : 13:57 17/05/17 »
gadacz Offline
Advanced Python User

Zobacz profil
**

Reputacja: 8
Płeć: Mężczyzna
Wiadomości: 130


Dorzuciłem dodatkowy parametr do filtra i śmiga Uśmiech, paginacja również.

Dzięki wielkie, a ja tutaj wielkie kombinacje chciałem tworzyć.
Kod
class TasksArchiveListView(LoginRequiredMixin, ListView):
   model = Tasks
   paginate_by = 5
   context_object_name = 'tasks_archive_list'
   template_name = 'tasks/tasks_archive_list.html'
 
   def get_queryset(self):
       user = self.request.user
       if user.is_superuser:
           return Tasks.objects.filter(archive=True).order_by('-entry_date')
       else:
           return Tasks.objects.filter(tasksuser_id=user, archive=True).order_by('-entry_date')

Zapisane

--
pozdrawiam
gadacz
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