Python 如何根据输入创建不同的对象?

Python 如何根据输入创建不同的对象?,python,django,Python,Django,到目前为止,我所拥有的: import app.models as models if table_name == "Appliances": model = models.Appliances elif table_name == "ArtsCraftsAndSewing": model = models.ArtsCraftsAndSewing ... for index, row in df.iterrows(): mod

到目前为止,我所拥有的:

import app.models as models

if table_name ==  "Appliances":
    model = models.Appliances
elif table_name == "ArtsCraftsAndSewing":
    model = models.ArtsCraftsAndSewing
...

for index, row in df.iterrows():
    model = model(param1=row[column1], param2=row[column2], ...)
    model.save()
TypeError:“设备”对象不可调用

基本上,我试图调用
model=models.Appliances(param1=row[column1],param2=row[column2],…)
,但特定对象会根据输入而变化

编辑:
设备
艺术品和缝纫
具有相同的参数。

通过写入:

model = model(…)
在第二次迭代中,
model
不再指模型,而是指该模型的对象。您应该更改对象的名称,例如:

for index, row in df.iterrows():
    model_object = model(param1=row[column1], param2=row[column2], …)
    # …
对于索引,df.iterrows()中的行:
model_object=model(param1=row[column1],param2=row[column2],…)
#…
您可能需要使用字典进行映射:

models = [models.Appliances, models.ArtsCraftsAndSewing]
model_dict = {
    m.__name__: m for m in models
}
model = model_dict[table_name]
models=[models.Appliances,models.artScrafts和缝纫]
模型参数={
m、 _u名称_uu:m表示模型中的m
}

model=model\u dict[table\u name]
只需创建一个包含所有不同模型类型的字典,并将输入作为键传递:

model_types = dict('appliances' = Appliances, 'arts_crafts_and_sewing' = ArtsCraftsAndSewing)

your_object = model_types[type](param1=arg1, param2=arg2, ...) // here `type` is your input which you can enter via some form or whatever.
你可以用这里


注意:我假设
table\u name
将是Django模型名。

table\u name是否将始终与模型类名相同?@ArakkalAbu是的,但我不想将输入字符串解析为python代码,因为它会带来安全问题。好吧,所以我实际上只是替换了所选的模型类。它适用于第一次迭代,但不适用于其他迭代。我试图压缩变量的数量,但那是错误的压缩。
from app_name import models

table_name = 'Appliances' # or something else
ModelKlass = getattr(models, table_name)

for index, row in df.iterrows():
    model_instance = ModelKlass(param1=row[column1], param2=row[column2], ...)