[英]python - ignore invalid keyword argument when usking **dict
我正在使用django和etree將xml內容抓取到數據庫中。 我想使用etree(root.attrib)從xml創建一個字典,然后使用Model(** dict)在Django中創建一個模型實例。 我並不一定要數據庫模型中的所有xml屬性,但我不想手動構造dict(或者用逗號分隔的關鍵字參數列表)或從dict中手動刪除那些不是在模型中,因此不是模型實例的構造函數的有效關鍵字參數。
因此,當我在xml中有一個不是模型中的有效字段的字段時,最終收到下面的錯誤。 有誰知道一種通用的方法(特別是Django orm模型構造函數)來獲取python來忽略kwargs(如果使用** dict傳遞參數時對函數無效)?
追溯(最近一次通話最后一次):文件“ ./load_games.py”,行189,在atbat = Atbat(** atbat_dict)文件“ /usr/local/lib/python2.7/dist-packages/django/db/ models / base.py“,第555行,在init中引發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)
while True:
try:
atbat = Atbat(**atbat_dict)
except TypeError as e:
bad_key = str(e).split('\'')[1]
atbat_dict.pop(bad_key)
continue
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.