क्या डिजांगो मॉडल पर एक शब्दकोष बनाया जा सकता है?


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 (** data_dict) का उपयोग करते समय आपको सेव विधि को कॉल करने की आवश्यकता नहीं है। आप शायद यह पहले से ही जानते हैं, लेकिन सिर्फ एक सिर।

4
मैंने पहले objects.createविधि का उपयोग नहीं किया है , इसलिए आपने मुझे कुछ नया सिखाया है।
अलास्देयर

2
ऑब्जेक्ट भी बनाएँ। नए मॉडल के लिए एक पॉइंटर लौटाता है, जिसमें एक मान्य पीके भरा होता है। इसका मतलब है कि आप संबंधित मॉडल बनाने के लिए तुरंत इसका उपयोग कर सकते हैं।
टॉम लीज

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 के साथ काम नहीं किया। मुझे MTM रिलेशन के लिए कुछ और करना पड़ा जैसे कि modelinstance.save (), modelinstance.add (Foreignobject.id)। हालांकि धन्यवाद। इसने मुझे काम करने के लिए सही रास्ते पर लाने में मदद की।
रोबॉट ह्यूमन्स

0

सीधे सवाल का जवाब नहीं है, लेकिन मुझे लगता है कि इस कोड ने मुझे सही उत्तर में अच्छी तरह से बचाने वाले डक्ट बनाने में मदद की। यदि किए गए रूपांतरणों की आवश्यकता होती है, तो यह डेटा 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 )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.