用于删除关键模型的 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)
在django-1.x, 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 ForeignKey
s?
也许这里 PROTECT
[Django-doc] 更合适,因为如果它仍然被引用,它会简单地阻止删除对象。
然而,最佳解决方案取决于大量细节。因此,最好查看可能的 on_delete=…
strategies [Django-doc].
我 运行 遇到了一个以前从未处理过的问题。我有一个任务要从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)
在django-1.x, 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
ForeignKey
s?
也许这里 PROTECT
[Django-doc] 更合适,因为如果它仍然被引用,它会简单地阻止删除对象。
然而,最佳解决方案取决于大量细节。因此,最好查看可能的 on_delete=…
strategies [Django-doc].