Profile
にリンクしているのでUser
、関係の依存モデルです。したがって、ユーザーを削除すると、すべての依存モデルが削除されます。ただし、プロファイルを削除すると、プロファイルにUser
依存しないため、削除されません。
残念ながら、on_delete
Djangoのドキュメントon_delete
によると、親関係を削除するルールはありません。Profile
これを行うには、のdelete
メソッドを上書きできます。
class Profile(models.Model):
# ...
def delete(self, *args, **kwargs):
self.user.delete()
return super(self.__class__, self).delete(*args, **kwargs)
次に行うとき:
Profile.objects.get(...).delete()
プロファイルのユーザーも削除されます。ただし、delete
クエリセット(Django Adminで呼び出されるもの)を使用してプロファイルを削除する場合、メソッドは呼び出されません。それ以降、DjangoはSQLDELETEを使用してオブジェクトを一括削除します。
Profile.objects.filter(...).delete()
その場合、Django docspost_delete
で推奨されているように、 signal(docs )を使用する必要があります。
from django.dispatch import receiver
from django.db.models.signals import post_delete
@receiver(post_delete, sender=Profile)
def post_delete_user(sender, instance, *args, **kwargs):
if instance.user: # just in case user is not specified
instance.user.delete()