-1

我想要的是使字符串 var 可调用。我只有一个包含不同模型名称的列表,我想像这样调用他们的创建方法。

class Object_model_a:
     #def ...
class Object_model_b:
     #def ...
class Object_model_c:
     #def ...

list = ('Object_model_a', 'Object_model_b', 'Object_model_c')
x = list[0]() # this must create a new instance of Object_model_a

可以像这样使用 php 进行开发:

$hi = 'Hello'
$Hello = 'Hi!!'
echo $$hi
>> Hi!!

任何人都知道这是否可以使用 django ?这将大大简化我的代码。

非常感谢!

4

3 回答 3

4

您可以使用 Django 的get_model辅助函数,它接受应用程序名称和模型名称并返回模型类。

from django.db.models import get_model

list = ('Object_model_a', 'Object_model_b', 'Object_model_c')
model = get_model('my_app_name', list[0]) # returns Object_model_a class
instance = model() # creates a model instance
于 2012-05-29T11:51:14.097 回答
0

如果出于某种原因您有一个表示特定类的字符串,则使用它来实例化该类的对象的正确方法是将您的类放在 a 中dict,由字符串键入,然后调用该类。

classes = dict((c.__name__, c) for c in (Object_model_a, Object_model_b, Object_model_c))

instance = classes['Object_model_a']()

显然,您不需要使用类名作为键。

于 2012-05-29T11:55:45.327 回答
-1

感谢您的所有评论,这就是我解决此要求的方式。

def create_object_instance(model_name, id=None):
    for model in get_models():
        if str(model.__name__).lower() == str(model_name).lower():
            if id:
                try:
                    return model.objects.get(id=id)              
                except ObjectsDoesNotExist:
                    return None
            else:
                return model.objects.all()
    return None
于 2012-05-30T08:07:03.527 回答