답변:
경우 title
와 body
모델의 필드는 다음 당신은 ** 연산자를 사용하여 사전에 키워드 인수를 제공 할 수 있습니다 .
모델이 호출되었다고 가정합니다 MyModel
.
# create instance of model
m = MyModel(**data_dict)
# don't forget to save to database!
m.save()
두 번째 질문에 관해서는 사전이 마지막 인수 여야합니다. 다시, extra
그리고 extra2
모델의 필드해야한다.
m2 =MyModel(extra='hello', extra2='world', **data_dict)
m2.save()
objects.create
전에 방법을 사용하지 않았 으므로 당신은 나에게 새로운 것을 가르쳐주었습니다.
ForeignKey
s에 의해 조금 얻었다 . 모델이 된 경우 ForeignKey
라고 owner
, 다음은 data_dict
해야 owner_id
필드. 그러나 필드 django.forms.model_to_dict()
가있는 사전을 반환 owner
합니다. 그래서 당신은 할 수 없습니다 MyModel(**model_to_dict(my_instance))
; owner
필드 이름 을 owner_id
.
질문에 대한 직접적인 답은 아니지만이 코드가 정답에 멋지게 저장되는 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 )