Django:动态模型在创建后消失

时间:2017-05-24 14:39:30

标签: python django django-models

我们说我有2个型号。 Model_A和Model_B。

每当admin用户对model_A的对象进行更改时,他们都会单击" save"按钮。

所以,当"保存"碰巧,我想发送一个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

有谁知道为什么会发生这种偷偷摸摸的事情?

1 个答案:

答案 0 :(得分:3)

这可能是因为您的服务器正在使用多个进程。任何动态类只存在于创建它的进程中;即便如此,它也不会在重启过程中持续存在。

我不知道你的用例是什么,但这肯定不是这样做的。