首页 > 解决方案 > 为什么我们将函数作为参数传入而不在 django 中执行?

问题描述

在创建包含标题、内容和作者的帖子模型时,我author = models.ForeignKey(User, on_delete=models.CASCADE)为作者写作,因为一个作者可以有很多帖子。我的问题是为什么传递给on_delete参数的函数没有执行。换句话说,为什么on_delete=models.CASCADE()不是(注意括号)?

标签: pythondjango

解决方案


因为当解释器看到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收集应该删除的额外对象(并递归地继续这样做)。


推荐阅读