2011-10-20 29 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

我将方法从视图中的类中分离出来并在视图中调用它。它看起来不错,谢谢。 –