Skip to main content
 首页 » 编程设计

python之Django:每次更新都会调用模型 __init__()

2025年05月04日21duanxz

我的一个模型中有一个相当神秘的问题。我已经覆盖了 __init__ 如下:

class Program(models.Model) 
    ... 
    def __init__(self, *args, **kwargs): 
        super(Program, self).__init__(*args, **kwargs) 
        for m in Milestone.objects.all(): 
            try: 
                ProgramMilestone.objects.create(milestone = m, program = self) 
            except IntegrityError: # The link already exists. 
                pass 

其中 ProgramMilestone 是 Milestone 和 Program 之间的链接器表(使用 through='...')。

我希望所有 Milestones 仅在程序创建时添加到 Program 中,但现在每当我在 Django 的管理界面中打开程序时,它都会运行for m... 循环(使得无法删除 Django 管理中的任何 ProgramMilestone 对象,因为它们只会在刷新时重新生成)。

我是否误解了 __init__ 的作用,如果是,我该如何创建这种行为(即仅在实例化时运行的一次性代码)?

请您参考如下方法:

如果我没听错,您想在创建程序时运行一些代码。

您可以使用 post_save 信号并检查 created 标志。

https://docs.djangoproject.com/en/dev/ref/signals/#post-save

通过让您的代码监听该信号,您可以在程序创建时运行您的代码,而不是更改。