python - 当usking ** dict

时间:2017-11-18 22:56:44

标签: python xml django kwargs

我正在使用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'是此函数的无效关键字参数

2 个答案:

答案 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