首页 > 解决方案 > 如何在 Django 中手动添加删除 SQL 约束?

问题描述

在现有的 Django 项目中,当删除某个模型的对象时,我遇到了严重的性能问题。实际上整个基础设施都崩溃了。

我很高兴这是由另一个具有许多大型条目的模型的外键字段引起的。

经过几个小时的谷歌搜索,我找到了一个可能的解决方案:在数据库级别上实现删除约束。

我还在 Django PR https://github.com/django/django/pull/8661中找到了一个持久的讨论,它将启用此功能。但我似乎从未达到 100% 并且不会在不久的将来合并。

Django Docs https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.DO_NOTHING中提到了解决我的问题的另一种方法

没做什么

不采取行动。如果您的数据库后端强制执行引用完整性,这将导致 IntegrityError,除非您手动将 SQL ON DELETE 约束添加到数据库字段。

我正在使用 MariaDB。而且我想在数据库级别仅向一个模型的一个外键字段添加一个 SET_NULL 约束。

我怎么能在 Django 中做到这一点?如果他们解决了我的问题并且不引入新的问题,我可以完美地接受硬编码的丑陋解决方案。

标签: djangodjango-models

解决方案


推荐阅读