2009-10-15 13 views

答えて

143

もしtitlebodyある分野、そしてyou can deliver the keyword arguments in your dictionary using the ** operatorを拡張することができればさらに良いです。

モデルがMyModelと呼ばれていると仮定すると:あなたの2番目の質問については

# create instance of model 
m = MyModel(**data_dict) 
# don't forget to save to database! 
m.save() 

、辞書には、最後の引数にする必要があります。ここでも、extraextra2はモデル内のフィールドにする必要があります。

m2 =MyModel(extra='hello', extra2='world', **data_dict) 
m2.save() 
+10

おかげで、それは私が何を探していたまさにです。また、ちょうどあなたの投稿に基づいてサイドノートとして。 Model.objects.create(** data_dict)を使用するときにsaveメソッドを呼び出す必要はありません。あなたはすでにこれを知っているかもしれませんが、ただ頭が上がっています。 –

+3

私は以前に 'objects.create'メソッドを使っていませんでしたので、何か新しいことを教えてくれました。 – Alasdair

+2

また、objects.createは有効なpkを埋め込んだ新しいモデルへのポインタを返します。これはすぐに関連モデルを構築するために使用できます。 –

1

未直接質問への答えが、私は、このコードは私が正しい答えにうまく保存dicts作成を支援見つけます。このデータをjsonにエクスポートする場合は、型変換が必要です。

私はこれが役に立てば幸い:

#mod is a django database model instance 
def toDict(mod): 
    import datetime 
    from decimal import Decimal 
    import re 

    #Go through the object, load in the objects we want 
    obj = {} 
    for key in mod.__dict__: 
    if re.search('^_', key): 
     continue 

     #Copy my data 
    if isinstance(mod.__dict__[key], datetime.datetime): 
     obj[key] = int(calendar.timegm(ts.utctimetuple(mod.__dict__[key]))) 
    elif isinstance(mod.__dict__[key], Decimal): 
     obj[key] = float(mod.__dict__[key]) 
    else: 
     obj[key] = mod.__dict__[key] 

    return obj 

def toCsv(mod, fields, delim=','): 
    import datetime 
    from decimal import Decimal 

    #Dump the items 
    raw = [] 
    for key in fields: 
    if key not in mod.__dict__: 
     continue 

     #Copy my data 
    if isinstance(mod.__dict__[key], datetime.datetime): 
     raw.append(str(calendar.timegm(ts.utctimetuple(mod.__dict__[key])))) 
    elif isinstance(mod.__dict__[key], Decimal): 
     raw.append(str(float(mod.__dict__[key]))) 
    else: 
     raw.append(str(mod.__dict__[key])) 

    return delim.join(raw) 
関連する問題