使用变量名调用Django模型的filter
可能是重复的问题:
django:用字符串选择特定模型
举个例子:(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
从实例中获取类。
mod = my_instance.__class__
if mod.objects.filter(fileTypeNumber=1).exists():
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)
这样会为Foo
和Bar
这两个模型创建两个视图。不过,如果这两个模型的字段不一样(或者你需要验证、处理其他事情等),那么手动为每个模型单独创建视图可能会更好,而不是使用这种抽象的创建方法。