为模型名称(Django)调用带变量名称的过滤器

时间:2013-02-02 19:51:36

标签: python django filter

  

可能重复:
  django: use a string to select a specifc model

示例:(Django,views.py)

def create(request, mod):  
    #mod is a modelname    
    if request.method == 'POST':  
        form = globals()[mod+"Form"](request.POST)  
        if form.is_valid():  
            new_file_num = form.save(commit=False)  
            >>>> if entry.objects.filter(fileTypeNumber=1).exists():  

我的问题就在这里。

if entry.objects.filter( ....

相反,我想:

mod = entry;  
if mod.objects.filter( ....  

这里的总体目标是对具有不同字段的多个模型使用相同的“视图”。 有一个更好的方法吗?该视图基本上是分配文件编号然后保存它。

提前致谢

2 个答案:

答案 0 :(得分:0)

从实例中提取类。

mod = my_instance.__class__
if mod.objects.filter(fileTypeNumber=1).exists():

答案 1 :(得分:0)

你可能会做类似的事情:

from models import Foo, Bar

def create_view(model):
    # model is the actual model class (not instance)
    def view(request):
        form = globals()[model.__name__ + "Form"]
        if model.objects.filter(fileTypeNumber=1).exists():
            pass
            # whatever you do with it
    return view

foo_view = create_view(Foo)
bar_view = create_view(Bar)

这会为FooBar模型制作两个视图。但是如果你为每个模型设置了不同的字段(或者如果你正在验证或做其他需要不同处理的事情),你可能最好只为每个模型手工制作不同的视图,而不是做这种抽象创建功能