जवाबों:
तो 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
। यदि आपके मॉडल में एक 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 )