gpt4 book ai didi

django - 添加到Django模型的“构造函数”

转载 作者:行者123 更新时间:2023-12-04 00:50:52 25 4
gpt4 key购买 nike

每当创建特定Django模型的实例时,我都希望进行额外的初始化。我知道overriding __init__ can lead to trouble。我还应该考虑其他哪些选择?

更新。其他详细信息:目的是初始化该模型的实例代表的状态机。该状态机由导入的库提供,其内部状态由我的django-model持久化。这个想法是,无论何时加载模型,状态机都会自动使用模型的数据进行初始化。

最佳答案

覆盖__init__可能有效,但这不是一个好主意,也不是Django的方法。

在Django中执行此操作的正确方法是使用signals

在这种情况下,您感兴趣的是pre_initpost_init


django.db.models.signals.pre_init

每当您实例化Django时
模型,此信号在模型__init__()的开头发送
方法。

django.db.models.signals.post_init

类似于pre_init,但此邮件已发送
__init__():方法完成时


所以你的代码应该像

from django.db import models
from django.db.models.signals import post_init

class MyModel(models.Model):
# normal model definition...

def extraInitForMyModel(**kwargs):
instance = kwargs.get('instance')
do_whatever_you_need_with(instance)

post_init.connect(extraInitForMyModel, MyModel)


您也可以将信号连接到Django的预定义模型。

关于django - 添加到Django模型的“构造函数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415616/

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