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

时间:2009-10-15 10:41:29

标签: python django django-models dictionary

甚至可以用列表,字典或其他东西做类似的事情吗?

data_dict = {
    'title' : 'awesome title',
    'body' : 'great body of text',
}
Model.objects.create(data_dict)

如果我可以扩展它,那就更好了

Model.objects.create(data_dict, extra='hello', extra2='world)

3 个答案:

答案 0 :(得分:180)

如果titlebody是模型中的字段,那么you can deliver the keyword arguments in your dictionary using the ** operator

假设您的模型被称为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()

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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