जवाबों:
तो 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 )