Kam*_*pta 6 django blogs django-models python-3.x
我正在使用 django 框架创建一个具有多用户功能的简单博客网站。在我的项目中,如果管理员删除任何用户,则不应删除该用户的所有博客,我尝试过使用
models.ForeignKey(django.contrib.auth.models.User,on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
但如果管理员删除用户,它显然会删除所有博客。有人可以帮我吗?预先感谢...
Wil*_*sem 12
这是由于on_delete=CASCADE. 这意味着如果删除引用的对象ForeignKey,那么它也应该删除引用的对象。因此,这CASCADE可能会导致大量对象被删除,因为对象的删除实际上可以触发其他删除,等等。
文档中列出了几个选项:
CASCADE:删除引用对象;PROTECT:不允许删除用户,因为存在引用该用户的对象;SET_NULL:设置为NULL(None在Python中),在这种情况下,必须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
)
# ...Run Code Online (Sandbox Code Playgroud)
最好使用settings.AUTH_USER_MODEL,因为如果您稍后更改User模型,这将自动更改对新模型的引用。
| 归档时间: |
|
| 查看次数: |
5350 次 |
| 最近记录: |