gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:05 26 4
gpt4 key购买 nike

我的一个模型中有一个相当神秘的问题。我已经覆盖了 __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 是 MilestoneProgram 之间的链接器表(使用 through='...')。

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

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

最佳答案

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

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

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

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

关于python - Django:每次更新都会调用模型 __init__(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com