我正在使用django框架创建一个具有多用户功能的简单博客网站。在我的项目中,如果管理员删除了任何用户,则不应删除该用户的所有博客,我尝试使用
models.ForeignKey(django.contrib.auth.models.User,on_delete=models.CASCADE)
,但如果管理员删除用户,则显然会删除所有博客。谁能帮我吗?预先感谢...
答案 0 :(得分:1)
这是由于 on_delete=CASCADE
引起的。这意味着如果ForeignKey
所引用的对象被删除,那么它也应该删除所引用的对象。这样的CASCADE
可以导致删除大量对象,因为删除对象实际上可以触发其他删除,依此类推。
documentation中列出了几个选项:
CASCADE
:删除引用对象; PROTECT
:由于存在引用用户的对象,因此不允许删除该用户; SET_NULL
:设置为NULL
(在Python中为None
),在这种情况下,必须在{{ 1}}构造函数; null=True
:将ForeignKey(..)
设置回SET_DEFAULT
值; ForeignKey
:将default=...
设置为传递给SET(..)
构造函数的值(一个也可以使用可调用对象); 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
)
# ...
模型,这将自动更改对新模型的引用。