我正在使用 django 和 etree 将 xml 内容抓取到数据库中。我想使用 etree (root.attrib) 从 xml 创建一个字典,然后使用 Model(**dict) 在 Django 中创建一个模型实例。我不一定想要数据库模型中的所有 xml 属性,但我不想手动构造字典(或逗号分隔的关键字参数列表)或手动从字典中删除不是的键在模型中,因此不是模型实例构造函数的有效关键字参数。
所以当我在 xml 中有一个字段不是模型中的有效字段时,我最终会收到以下错误。有谁知道在使用 **dict 传递参数时如果对函数无效则忽略 kwargs 的一般方法(特别是 django orm 模型构造函数)?
追溯(最近的调用最后): 文件“./load_games.py”,第 189 行,位于 atbat = Atbat(**atbat_dict) 文件“/usr/local/lib/python2.7/dist-packages/django/db/models/base.py”,第 555 行,在 init raise TypeError("'%s' 是这个函数的无效关键字参数"% list(kwargs)[0]) TypeError: 'des' 是此函数的无效关键字参数
最佳答案
您可以使用 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)
关于python - 使用 **dict 时忽略无效的关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47371946/