2017-05-24 59 views
0

假設我有2個模型。 Model_A和Model_B。Django:動態模型在創建後消失

每當管理員用戶對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 

有沒有人知道爲什麼這個偷偷摸摸的事情可能會發生?

回答

2

這可能是因爲您的服務器使用多個進程而發生的。任何動態類只存在於創建它的過程中;即使這樣,它也不會在整個重新啓動過程中持續存在。

我不知道你的用例在這裏,但這當然不是這樣做的方式。

+0

有道理。有沒有辦法保持這些模型? – cookiedough

+0

不是。您需要在流程啓動時重新創建所有內容,例如在AppConfig.ready中。你爲什麼這樣做? –

+0

Model_B的每個實例都從Amazon S3中檢索特定的一組數據。所以我想讓用戶說出他們想從桶中獲取什麼數據。 – cookiedough