簡體   English   中英

如何動態創建子 django 模型

[英]How to create child django models dynamically

我想創建 73 個不同的 django 模型,這些模型將非常相似,所以理論上我會從基礎 model class 繼承,只需更改模型/表的名稱。

我知道這不是最好的數據庫結構,但是我相信這種非常規的結構可能會改善我的應用程序的其他方面。 最初的目的是檢驗這個假設。

如何讓 django 創建模型,而無需定義所有 73 個模型?

class BaseModel(models.Model):
    some_field = models.CharField(max_length=255)
    some_other_field = models.CharField(max_length=255)

class Model_NR_01(BaseModel):
    pass

...

class Model_NR_73(BaseModel):
    pass

另外,在上面的示例中,我相信也會創建 BaseModel。 我怎么能防止這種情況,在遷移結束時只有提到的 73 個模型? (如果可能的話,當然)。

PS.:我確實搜索了幾個類似的問題,找不到實際答案,只是警告它的設計有多糟糕。 我知道。

type的三參數形式可用於動態創建類。 您需要在屬性字典中傳遞的唯一內容是__module__ ,因為使用type方式創建 class 不會自動填充 Django 所需的此屬性

class BaseModel(models.Model):
    some_field = models.CharField(max_length=255)
    some_other_field = models.CharField(max_length=255)

    class Meta:
        abstract = True


for i in range(1, 74):
    model_name = f'Model_NR_{i:02}'
    globals()[model_name] = type(model_name, (BaseModel, ), {'__module__': BaseModel.__module__})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM