我想要的是使字符串var可调用。我只有一个包含不同models_names的列表,我想以这种方式调用它们的创建方法。
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是否可行?这将简化我的代码。
非常感谢!
答案 0 :(得分: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
答案 1 :(得分:0)
如果由于某种原因你有一个表示特定类的字符串,那么使用它来实例化该类对象的正确方法是将类放在dict
中,由字符串键入,然后只是调用该类。
classes = dict((c.__name__, c) for c in (Object_model_a, Object_model_b, Object_model_c))
instance = classes['Object_model_a']()
显然,您不需要使用classname作为密钥。
答案 2 :(得分:-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