Piszę projekt django. I chcesz wiedzieć, po tym, jak użytkownik usunie własne konto, czy istnieje sposób na wbudowanie django, aby automatycznie usunąć cały obiekt powiązany z tym użytkownikiem (np. Jakiś ogólny obcy klucz)? Czy powinienem użyć sygnału "post_delete", aby usunąć wszystkie powiązane obiekty?Django jak usunąć profil i posty użytkownika oraz wszystkie powiązania po usunięciu użytkownika?
Odpowiedz
Kiedy Django usuwa obiekt, domyślnie emuluje zachowanie ograniczenia SQL W KASOWANIU DELETE - innymi słowy, wszelkie obiekty, które miały klucze obce wskazujące na obiekt, który ma zostać usunięty, zostaną usunięte wraz z nim.
https://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects
b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()
Dziękuję bardzo! – Xinghan
Należy wyraźnie usunąć wszystkie generycznych zagranicznych najważniejszych odniesień do oryginalnego obiektu przed oryginalny obiekt zostanie usunięty. Na przykład
Image.objects.filter(object_id=object_to_be_deleted.id,content_type = ContentType.objects.get_for_model(bject_to_be_deleted.get_profile())).delete()
object_to_be_deleted.delete()
kaskadowego usuwania jest wielki, kiedy to działa, na przykład, na jeden do jednego relacji w modelach, ale nie wydaje się, aby pracować dla generycznych obcych kluczowych relacji.
Dziękuję bardzo! – Xinghan
Chociaż zgadzam się z twoim zaleceniem, stwierdzenie "nie wydaje się działać dla ogólnych relacji z kluczowymi kluczami obcymi" wymaga dalszych wyjaśnień, ponieważ nie jest to normalne. – Wtower
@Wtower To było prawdą w 2012 roku (Django 1.4?), Ale wynika to z dokumentacji (https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#reverse-generic-relations), która teraz " jeśli usuniesz obiekt, który ma GenericRelation, wszystkie obiekty, które wskazują na GenericForeignKey, również zostaną usunięte ", co mogło być zmianą Django 1.7. –
Django nie zaleca usuwania użytkowników, ponieważ złamane zostaną klucze obce. Z tego powodu uwzględnili metodę is_active.
Zobacz https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.models.User.is_active
- 1. Django - Utwórz profil użytkownika podczas tworzenia użytkownika
- 2. Jak utworzyć profil po rejestracji użytkownika w Rails3 i Devise
- 3. Jak mogę uzyskać wszystkie posty od określonego użytkownika?
- 4. Profil użytkownika aktualizacji Meteor
- 5. Jak wypełnić profil użytkownika informacjami o dostawcy django-allauth?
- 6. Jak usunąć użytkownika SimpleMembership?
- 7. Jak usunąć pole Nazwa użytkownika z UserCreationForm w Django
- 8. Problem z administratorem Django rejestrującym profil użytkownika inline
- 9. SQL Server 2008 - Dodaj konto Windows po usunięciu domyślnego użytkownika
- 10. github: Jak usunąć wszystkie zatwierdzenia przez określoną nazwę użytkownika?
- 11. Django, zarejestruj użytkownika z imieniem i nazwiskiem?
- 12. Django automatyczne logowanie po rejestracji użytkownika (1.4)
- 13. Model użytkownika Django Oauth
- 14. Django Rest Framework - zwróć identyfikator użytkownika i token po rejestracji
- 15. Wymyśl sposób powiązania bieżącego użytkownika z postem?
- 16. Jak utworzyć użytkownika w Django?
- 17. Jak usunąć ostrość z EditText po zakończeniu edycji przez użytkownika?
- 18. Po usunięciu
- 19. Jak załadować profil nowo zalogowanego użytkownika przed przekierowaniem
- 20. Uwierzytelnianie użytkownika MongoEngine (django)
- 21. Wordpress Display Wszystkie posty
- 22. Jak uzyskać identyfikator użytkownika aktualnie zalogowanego użytkownika w Django?
- 23. Jak ponownie załadować profil użytkownika z pliku skryptu w PowerShell
- 24. Django 1.5 + Relacja modelu użytkownika
- 25. Django niestandardowy model użytkownika i usermanager
- 26. RESTful, uwierzytelnianie użytkownika i Django-tastypie
- 27. usunąć użytkownika podczas usuwania UserProfile
- 28. Jak usunąć kategorię użytkownika z szablonu?
- 29. Jak usunąć użytkownika FTP w ssh?
- 30. Jak filtrować zapytanie według właściwości profilu użytkownika w Django?
Czy na pewno związane z nimi obiekty nie są już usunięte? Nielegalne klucze ForeignKeys muszą zostać usunięte, aby uniknąć wystąpienia IntegrityError, a IIRC Django zrobi to domyślnie. Według ogólnego klucza obcego, masz na myśli właśnie [GenericForeignKey] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericForeignKey)? Ponieważ to staje się bardziej skomplikowane. – AdamKG
@AdamKG Myślę, że nie miałem na myśli GenericForeignKey specjalnie tutaj. Mam na myśli to, że KASKADĘ NA KAŻDĄ ZNAJDĘ mam już odpowiedź. Nie zrozumiałem jasno, co robi GenericForeignKey tak długo, jak Contenttype, studiuję. Kolejne pytanie, które być może nie jest względne w stosunku do tego, ale chcę zapytać: znalazłem implementację profilu użytkownika, wszystkie używają ForeignKey zamiast OneToOne. Czy mają tu związek wiele do jednego, czy to nie ma znaczenia. – Xinghan