字典可以在创建时传递给 django 模型吗?

有没有可能用 listdictionary或者其他类似的东西来做类似的事情?

data_dict = {
'title' : 'awesome title',
'body' : 'great body of text',
}


Model.objects.create(data_dict)

如果我能延长就更好了:

Model.objects.create(data_dict, extra='hello', extra2='world')
79335 次浏览

如果 titlebody是模型中的字段,那么 可以使用 * * 运算符传递字典中的关键字参数

假设你的模型叫做 MyModel:

# 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()

虽然不能直接回答这个问题,但是我发现这段代码帮助我创建了一些词组,可以很好地保存到正确的答案中。如果要将此数据导出到 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 )

对于任何型号的 DummyModel,您可以使用 DummyModel.objects.create(**data_dict)。不需要保存后创建。