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], ...)