【发布时间】:2020-12-02 10:14:05
【问题描述】:
我正在使用 Django 3 和 Python 3.8。我有以下型号...
class Coop(models.Model):
objects = CoopManager()
name = models.CharField(max_length=250, null=False)
types = models.ManyToManyField(CoopType, blank=False)
addresses = models.ManyToManyField(Address)
enabled = models.BooleanField(default=True, null=False)
phone = models.ForeignKey(ContactMethod, on_delete=models.CASCADE, null=True, related_name='contact_phone')
email = models.ForeignKey(ContactMethod, on_delete=models.CASCADE, null=True, related_name='contact_email')
web_site = models.TextField()
注意“电话”和“电子邮件”外键列。一旦它们成为孤儿,是否有任何 Django/Python 特定的方法可以自动删除 ContactMethod 记录?也就是说,如果我有我的模型,其中填充了两列,然后运行
coop.phone = None
coop.save(update_fields=['phone'])
有什么东西会自动删除孤立的记录吗?或者我猜想实现这一目标的标准方法是什么?我正在运行 MySql 8 db,但我更愿意排除特定于 DB 的解决方案。
【问题讨论】:
-
您可以尝试使用信号,但这不适用于 ORM 中的
.update(..)s、.delete(..)等。定期运行清理未引用的ContactMethods 的管理命令可能会更好。 -
不,没有。但是,您可以创建一个 Django 管理命令 并可以定期运行它
标签: python-3.x django django-models foreign-keys orphaned-objects