を、それが関係に依存したモデルです。したがって、ユーザーを削除すると、すべての従属モデルが削除されます。ただし、プロファイルを削除すると、User
はプロファイルに依存しないため、削除されません。
残念ながら、on_delete
Django docsによれば、親関係を削除する規則はありません。on_delete
やったときに次に
class Profile(models.Model):
# ...
def delete(self, *args, **kwargs):
self.user.delete()
return super(self.__class__, self).delete(*args, **kwargs)
:そのためには、あなたはProfile
のdelete
メソッドを上書きすることができます
Profile.objects.get(...).delete()
も、プロファイルのユーザーを削除します。それ以来(ジャンゴ管理に何と呼ばれている)クエリセットを使用したプロファイルを削除するときdelete
メソッドが呼び出されることはありませんしかし、DjangoはSQLは、バルク内のオブジェクトを削除する削除使用しています。その場合
Profile.objects.filter(...).delete()
、ジャンゴによって推奨されるようにdocsの場合、post_delete
シグナル(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()
ありがとう!私はまだDjangoの新機能ですので、他のDjangoのnoobがこれを見つけた場合は、@receiverデコレータにdispatch_uidを追加して動作させる必要がありました。しかし、その後、それは素晴らしい仕事をした! – Nick