Django ForeignKey约束失败错误

时间:2018-12-08 11:11:52

标签: django python-3.x django-models blogs

我正在使用django框架创建一个具有多用户功能的简单博客网站。在我的项目中,如果管理员删除了任何用户,则不应删除该用户的所有博客,我尝试使用

models.ForeignKey(django.contrib.auth.models.User,on_delete=models.CASCADE)

,但如果管理员删除用户,则显然会删除所有博客。谁能帮我吗?预先感谢...

1 个答案:

答案 0 :(得分:1)

这是由于 on_delete=CASCADE 引起的。这意味着如果ForeignKey所引用的对象被删除,那么它也应该删除所引用的对象。这样的CASCADE可以导致删除大量对象,因为删除对象实际上可以触发其他删除,依此类推。

documentation中列出了几个选项:

  1. CASCADE :删除引用对象;
  2. PROTECT :由于存在引用用户的对象,因此不允许删除该用户;
  3. SET_NULL :设置为NULL(在Python中为None),在这种情况下,必须在{{ 1}}构造函数;
  4. null=True :将ForeignKey(..)设置回SET_DEFAULT值;
  5. ForeignKey :将default=...设置为传递给SET(..)构造函数的值(一个也可以使用可调用对象);
  6. ForeignKey :这里我们保留了一个参考,但是某些数据库后端将 不允许这样做,因为这些检查了SET(..)约束。

例如,我们可以使用DO_NOTHING,并在删除作者的情况下将FOREIGN KEY设置为SET_NULL / author

NULL

最好使用None,因为如果以后更改from django.db import models from django.conf import settings class Post(models.Model): author = models.ForeignKey( settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL ) # ...模型,这将自动更改对新模型的引用。