2017-11-18 8 views
0

xmlコンテンツをデータベースにスクレイピングするためにdjangoとetreeを使用しています。私はetree(root.attrib)を使用してxmlからdictを作成し、次にModel(** dict)を使用してDjangoでモデルインスタンスを作成します。私は必ずしもデータベースモデルのすべてのXML属性を必要としませんが、手動でdict(またはカンマで区切られたキーワード引数リストのいずれか)を作成する必要はなく、dictから手動でキーを削除する必要もありませんしたがって、モデルインスタンスのコンストラクタに対する有効なキーワード引数ではありません。python - 使用しているときに無効なキーワード引数を無視するdict

したがって、モデル内の有効なフィールドではないxmlにフィールドがあると、以下のエラーが表示されます。 Pythonを一般的に(django ormモデルのコンストラクタを特別に)取得する方法を知っている人は、引数がdictで渡されたときに関数に有効でない場合、kwargsを無視するのですか?

トレースバック(最新の呼び出しの最後): ファイル "./load_games.py"、ライン189、中 atbat = Atbat(** atbat_dict) ファイル「/usr/local/lib/python2.7/dist init raise TypeError( "'%s'はこの関数の無効なキーワード引数です) TypeError(-packages/django/db/models/base.py" : 'des'はこの関数の無効なキーワード引数です

答えて

1

meta API

を使用してモデルの実際のフィールドであるキーをフィルタリングできます
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) 
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 
関連する問題