假设我有 2 个模型。Model_A和Model_B。
每当管理员用户对model_A对象进行更改时,他们都会单击"保存"按钮。
因此,当发生"保存"时,我想发送一个post_save信号,创建一个继承自Model_B的模型。
当我像下面这样这样做时,模型确实被创建,但它们在刷新页面后消失,有时它们在再次刷新后再次出现。但他们并不总是留在名单上。(奇怪,我知道!
所以post_save信号的代码是这样的:
post_save.connect(create_new_model, sender=Model_A)
我create_new_model是这样的:
def create_new_model(sender, instance, **kwargs):
attrs = {
'field1': models.CharField(max_length=40),
'field2': models.CharField(max_length=40),
'__module__': 'appname.models'
}
from appname.models import create_model, admin_options, modelsList
mod = create_model(name=str(len(modelsList)),
fields=attrs,
admin_opts=admin_options
)
modelsList.append(mod)
最后,创建动态模型 (create_model( 的函数如下所示:
def create_model(name, fields=None, admin_opts=None):
from appname.models import Model_A
attrs = fields
model = type(name, (Model_A,), attrs)
if admin_opts is not None:
admin.site.register(model, admin_opts)
return model
有谁知道为什么会发生这种偷偷摸摸的事情?
这可能是因为您的服务器正在使用多个进程。任何动态类都只存在于创建它的进程中;即便如此,它也不会在进程重启后持续存在。
我不知道你在这里的用例是什么,但这肯定不是这样做的方法。