回答:
場合title
やbody
モデル内のフィールドがあり、その後、あなたは**演算子を使用して、辞書にキーワード引数を提供することができます。
モデルが呼び出されていると仮定しますMyModel
:
# create instance of model
m = MyModel(**data_dict)
# don't forget to save to database!
m.save()
2番目の質問については、辞書が最後の引数でなければなりません。ここでも、extra
およびextra2
モデル内のフィールドでなければなりません。
m2 =MyModel(extra='hello', extra2='world', **data_dict)
m2.save()
objects.create
以前にその方法を使用したことがないので、あなたは私に何か新しいことを教えました。
ForeignKey
。お使いのモデルがいる場合にForeignKey
呼び出されowner
、その後、あなたがdata_dict
持つべきowner_id
フィールドを。しかしdjango.forms.model_to_dict()
、owner
フィールドを持つ辞書を返します。だからあなたはできませんMyModel(**model_to_dict(my_instance))
。owner
フィールドの名前をに変更する必要がありますowner_id
。
質問への直接の回答ではありませんが、このコードは、正しい回答にうまく保存できる辞書を作成するのに役立ちました。このデータを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 )