我正在使用django和etree将xml内容刻录到数据库中。我想使用etree(root.attrib)从xml创建一个dict,然后使用Model(** dict)在Django中创建一个模型实例。我不一定想要数据库模型中的所有xml属性,但我不想手动构造dict(或逗号分隔的关键字参数列表)或手动从dict中删除不是在模型中,因此不是模型实例的构造函数的有效关键字参数。
因此,当xml中的字段不是模型中的有效字段时,我最终得到以下错误。有没有人知道一般的方法获取python(具体是django orm模型构造函数),如果在使用** dict传递参数时对函数无效,则忽略kwargs?
追踪(最近一次通话): 文件“./load_games.py”,第189行,in atbat = Atbat(** atbat_dict) 在 init 中输入文件“/usr/local/lib/python2.7/dist-packages/django/db/models/base.py”,第555行 引发TypeError(“'%s'是此函数的无效关键字参数”%list(kwargs)[0]) TypeError:'des'是此函数的无效关键字参数
答案 0 :(得分:1)
您可以使用meta API过滤dict
作为模型实际字段的键:
fields = set(f.name for f in Model._meta.get_fields())
dct = {k: v for k, v in dct.items() if k in fields}
m = Model(**dct)
答案 1 :(得分:0)
while True:
try:
atbat = Atbat(**atbat_dict)
except TypeError as e:
bad_key = str(e).split('\'')[1]
atbat_dict.pop(bad_key)
continue
break