【问题标题】:How to execute CASCADE on delete?如何在删除时执行 CASCADE?
【发布时间】:2015-08-11 16:11:02
【问题描述】:

我在 Django 中有这个模型,其中 person 具有与 Django 提供的 user 相同的信息以及更多信息。当我创建一个新的person 时,它还需要创建一个新的user,这很好。但是当我删除 person 时,user 仍然保留在我的数据库中。我在这里想念什么?我也想删除user

class Person(models.Model):
    user = OneToOneField(User)
    gender = CharField(max_length=1, choices=GenderChoices, blank=True, null=True)
    birth_date = DateField(blank=True, null=True)

    def __unicode__(self):
        return self.user.username

【问题讨论】:

标签: python django orm models


【解决方案1】:

在模型上尝试override the delete method(代码未测试):

class Person(models.Model):
    user = OneToOneField(User)
    gender = CharField(max_length=1, choices=GenderChoices, blank=True, null=True)
    birth_date = DateField(blank=True, null=True)

    def __unicode__(self):
        return self.user.username

    def delete():
        theuser = User.objects.get(id=user)
        theuser.delete()

我找到了一些关于在 Django here 中使用 CASCADE 的相关文档。

【讨论】:

  • 感谢 Sebas 的回答,但我认为如果我覆盖删除方法,我可能会发现批量操作存在一些问题:stackoverflow.com/a/16621653/523168
  • 也许您可以使用 pre_deletepost_delete 信号来创建能够正确处理该问题的事件......我还没有玩过信号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多