2012-02-04 11 views
56

Potrzebuję wybrać kilka obiektów do usunięcia z mojej bazy danych w django za pomocą strony internetowej. Nie ma kategorii do wyboru, więc nie mogę usunąć wszystkich z nich w ten sposób. Czy muszę zaimplementować mój własny formularz usuwania i przetworzyć go w django lub czy django może już to zrobić? Wdrożony w interfejsie administratora.Usuń wiele obiektów w django

Odpowiedz

101

Możesz usunąć dowolny zestaw kwerend, który chcesz. Na przykład, aby usunąć wszystkie wpisy na blogach z jakiegoś modelu post

Post.objects.all().delete() 

i usunąć dowolny postem z przyszłą datą publikacji

Post.objects.filter(pub_date__gt=datetime.now()).delete() 

Zdajesz jednak trzeba wymyślić sposób zawężenia w dół swój zestaw kwerend. Jeśli chcesz, aby widok usunął konkretny obiekt, spójrz na delete generic view.

EDYTOWANIE:

Przepraszamy za nieporozumienie. Myślę, że odpowiedź jest gdzieś pomiędzy. Aby zaimplementować własne, połącz ModelForm s i generic views. W przeciwnym razie sprawdź aplikacje innych firm, które zapewniają podobną funkcjonalność. W dokumencie related question zalecono django-filter.

+1

Nie zrozumiałeś tego pytania. Rozumiem, że mogę wszystko usunąć. Ale muszę wybrać obiekty do usunięcia za pomocą formularza na stronie internetowej. A następnie przetwarzaj dane zwrócone z formularza w moim views.py. Następnie zapętlić to, co powróciło w formularzu, usuwając jako pętlę danych. Ale chciałem wiedzieć, jaka jest najlepsza praktyka w implementacji tego w django. – Dean

+0

Ach, mój błąd! Chciałbym użyć aplikacji innej firmy lub ogólnych widoków z 'ModelForm's. –

+5

@Dean, spójrz na ten widok usuwania. Albo możesz po prostu napisać swój własny widok ... Mam na myśli ostatecznie, że prawdopodobnie otrzymujesz listę PK i wywołanie delete na twoim modelu ... 'MyModel.objects.filter (id__in = request.POST.getlist ('delete_list')) .delete() 'i jestem pewien, że chcesz coś, aby upewnić się, że losowa osoba nie może usunąć wszystkich obiektów w twoim DB przez zgadywanie PKs. –