Est-il possible de faire quelque chose de similaire à cela avec un list
, dictionary
ou autre chose?
data_dict = {
'title' : 'awesome title',
'body' : 'great body of text',
}
Model.objects.create(data_dict)
Encore mieux si je peux l'étendre:
Model.objects.create(data_dict, extra='hello', extra2='world')
Si title
et body
sont des champs dans votre modèle, alors vous pouvez fournir les arguments de mot-clé dans votre dictionnaire en utilisant l'opérateur ** .
En supposant que votre modèle s'appelle MyModel
:
# create instance of model
m = MyModel(**data_dict)
# don't forget to save to database!
m.save()
Quant à votre deuxième question, le dictionnaire doit être le dernier argument. Encore une fois, extra
et extra2
devrait être des champs dans le modèle.
m2 =MyModel(extra='hello', extra2='world', **data_dict)
m2.save()
Pas directement une réponse à la question, mais je trouve que ce code m'a aidé à créer les dictons qui sauvegardent bien dans la bonne réponse. Les conversions de type effectuées sont requises si ces données seront exportées vers json.
J'espère que ça aide:
#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 )