একটি অভিধান তৈরি করতে জাঙ্গো মডেল পাস করা যেতে পারে?


111

এটির সাথে অনুরূপ কিছু করা সম্ভব list, dictionaryবা অন্য কিছু?

data_dict = {
    'title' : 'awesome title',
    'body' : 'great body of text',
}

Model.objects.create(data_dict)

এমনকি যদি আমি এটি প্রসারিত করতে পারি তবে আরও ভাল:

Model.objects.create(data_dict, extra='hello', extra2='world')

উত্তর:


211

যদি 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()

12
ধন্যবাদ, আমি ঠিক তাই করতে চাইছিলাম। পাশাপাশি, আপনার পোস্টের ভিত্তিতে সাইড নোট হিসাবে। Model.objects.create (** ডেটা_ডিক্ট) ব্যবহার করার সময় আপনাকে সেভ পদ্ধতিতে কল করতে হবে না। আপনি সম্ভবত এটি ইতিমধ্যে জানেন কিন্তু কেবল একটি মাথা আপ।

4
আমি objects.createআগে পদ্ধতিটি ব্যবহার করি নি, তাই আপনি আমাকে নতুন কিছু শিখিয়েছেন।
আলাসডায়ার

2
এছাড়াও অবজেক্টস ক্রিয়েট নতুন মডেলটিতে একটি বৈধ পিকে ভর্তি করে একটি পয়েন্টার ফেরত দেয় This এর অর্থ আপনি এটি সাথে সাথে সম্পর্কিত মডেলগুলি তৈরি করতে ব্যবহার করতে পারেন।
টম লেস

10
আমি ForeignKeyবি। যদি আপনার মডেল একটি হয়েছে ForeignKeyবলা owner, তারপর আপনারdata_dict একটি থাকতে হবে owner_idক্ষেত্র। তবে django.forms.model_to_dict()একটি ownerক্ষেত্র সহ একটি ডিক ফেরত দেয়। সুতরাং আপনি করতে পারবেন না MyModel(**model_to_dict(my_instance)); আপনাকে ownerক্ষেত্রটির নতুন নামকরণ করতে হবে owner_id
cberzan

বিদেশী কী জিনিস (_id যোগ করে) আমার সাথে 1.5.4.4 দিয়ে কাজ করে না। এমটিএম সম্পর্কের জন্য আমাকে মডেলিনস্ট্যানস.স্যাভ (), মডেলিনস্ট্যানস.এডিডি (বিদেশিবজেক্ট.আইডি) এর মতো আরও কিছু করতে হয়েছিল। ধন্যবাদ যদিও. এটি সত্যই আমাকে এটির কাজ করার জন্য সঠিক পথে যেতে সাহায্য করেছিল।
রোবটহুমানস

0

সরাসরি প্রশ্নের উত্তর নয়, তবে আমি খুঁজে পেয়েছি যে এই কোডটি আমাকে সঠিক উত্তরগুলির মধ্যে সুন্দরভাবে সংরক্ষণ করে এমন ডিক্টস তৈরি করতে সহায়তা করেছে। এই তথ্যটি জসন রফতানি করা হলে তৈরি ধরণের রূপান্তরগুলির প্রয়োজন।

আশা করি এটা কাজে লাগবে:

  #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 )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.