উত্তর:
যদি 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
।
সরাসরি প্রশ্নের উত্তর নয়, তবে আমি খুঁজে পেয়েছি যে এই কোডটি আমাকে সঠিক উত্তরগুলির মধ্যে সুন্দরভাবে সংরক্ষণ করে এমন ডিক্টস তৈরি করতে সহায়তা করেছে। এই তথ্যটি জসন রফতানি করা হলে তৈরি ধরণের রূপান্তরগুলির প্রয়োজন।
আশা করি এটা কাজে লাগবে:
#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 )