用于删除关键模型的 Django DB 设计?

Django DB design for deleting crucial models?

我 运行 遇到了一个以前从未处理过的问题。我有一个任务要从django 1升级==> 2。(django 1在处理关系时不需要on_delete)

我有几个内部有关系的关键模型,但我绝对不想级联这些记录。例如,如果用户删除了他们的帐户,我不想删除他们的费用。也许我们需要保留这些费用实例以供以后进行税务记录等。

我读到 DO_NOTHING 也很危险。

对于这样的模型,处理外键时最好的做法是什么?

在此先感谢大家的帮助。

class Expenses(models.Model):

    user = models.ForeignKey(Account, null=True, blank=True, 
                             on_delete=models.?)
    event = models.ForeignKey(Event, null=True, blank=True, 
                             on_delete=models.?)
    payee = models.CharField(max_length=128, null=True, blank=True)
    category = models.ForeignKey(Category, blank=True, null=True,
                                related_name='expense_category', on_delete=models.?)

I have a task to upgrade from django 1 to 2. (django 1 doesn't require on_delete when dealing with relationships)

, if you did not specify on_delete, it used CASCADE [Django-doc]中,所以实际上通过指定它,可以使它更安全。

I have read that DO_NOTHING can also be dangerous.

好吧,大多数数据库都会为此引发完整性错误,因为那时它会引用不再存在的用户。所以 DO_NOTHING 本身并不危险,对于大多数数据库来说,它只是不允许删除数据库,但是通过删除 IntegrityError.

With a model like this, what would be the best course of action when dealing with the ForeignKeys?

也许这里 PROTECT [Django-doc] 更合适,因为如果它仍然被引用,它会简单地阻止删除对象。

然而,最佳解决方案取决于大量细节。因此,最好查看可能的 on_delete=… strategies [Django-doc].