python - 为什么我们将函数作为参数传入而不在 django 中执行?
问题描述
在创建包含标题、内容和作者的帖子模型时,我author = models.ForeignKey(User, on_delete=models.CASCADE)
为作者写作,因为一个作者可以有很多帖子。我的问题是为什么传递给on_delete
参数的函数没有执行。换句话说,为什么on_delete=models.CASCADE()
不是(注意括号)?
解决方案
因为当解释器看到models.CASCADE
.
这个想法是我们将一个函数传递给on_delete
参数,而不是调用该函数的结果,这样以后,当User
删除时,Django 框架将调用该函数来收集引用该用户的对象,并将这些对象删除为好。
因此,这意味着我们本身不会在您运行服务器时调用该函数,或者我们可以多次调用它。此外,触发函数需要参数:
def CASCADE(collector, field, sub_objs, using): collector.collect(sub_objs, source=field.remote_field.model, source_attr=field.name, nullable=field.null) if field.null and not connections[using].features.can_defer_constraint_checks: collector.add_field_update(field, None, sub_objs)
这里collector
收集应该删除的额外对象(并递归地继续这样做)。
推荐阅读
- javascript - 如何从 2 个 javascript 数组中获取唯一记录?
- javascript - 为什么 window.onload 只在某些时候被调用刷新?
- mongodb - Mongodb 为不存在的项目聚合 $group
- azure-devops - 我可以在同一个存储库中混合框架项目和 .net 标准项目吗?dotnet 包命令
- hadoop - 安装Hadoop的一些问题。ERROR: Attempting to operation on hdfs namenode as root ERROR:
- javascript - 如何在javascript中对数字数组进行排序,以确保在添加重复项之前完成第一个计数?
- java - 如何在java中找到数组中的第二大数字
- javascript - 如何通过 JavaScript 插入 HTML 元素?
- fsm - 长比特序列的 FSM
- react-native - 模块解析失败:意外令牌 (11:19)