2011-10-20 53 views
1

我正在嘗試爲我的模型創建通用視圖,並且我堅持動態地創建模型窗體。只需將模型的名稱作爲字符串來創建模型就可以了嗎?django上的通用CRUD視圖

+0

「動態創建模型表單」?爲什麼?什麼可能的情況導致這個? –

+0

您的意思是創建其他模型可以繼承的父模型嗎? – Lionel

+0

nope,我試圖從模型名稱的字符串中獲取模型 –

回答

4

您可以通過在視圖的本地範圍中簡單定義模型窗體的類,然後直接在其後創建它的實例來完成此操作。您只需確保根據其名稱接收模型的類。使用django的get_model函數。簡單示例:

def my_view(request): 
    model_name = "myapp.MyModel" #make sure the app name is also provided 
    from django.db.models import get_model 
    model_class = get_model(*model_name.split('.')) 

    class MyModelForm(ModelForm): 
     class Meta: 
      model = model_class 
     # other attributes of the form 

    form = MyModelForm() 
    # ... 
+0

我期待從django獲得一個方法,所以我不必在視圖中聲明一個類。我會盡力清理那個解決方案,看看我能得到什麼。 –

+0

您是否檢查過Django的基於類的通用視圖?特別是'FormView'?儘管如此,你仍然無法做到這一點,但你可以通過上述方法擴展它。 Django不會爲您提供一種方法來執行此操作。 –

+0

我將方法從視圖中的類中分離出來並在視圖中調用它。它看起來不錯,謝謝。 –