2009-10-15 16 views

cevap

143

Eğer title ve body olan alanlar, daha sonra you can deliver the keyword arguments in your dictionary using the ** operator uzatabilirsiniz bile daha iyi. Modelinizi varsayarsak

MyModel denir:

İkinci soruya gelince
# create instance of model 
m = MyModel(**data_dict) 
# don't forget to save to database! 
m.save() 

, sözlük nihai argüman olmalıdır. Yine, extra ve extra2 modelinde alanlar olmalıdır.

m2 =MyModel(extra='hello', extra2='world', **data_dict) 
m2.save() 
+10

sayesinde, yapmak isteyen tam olarak budur. Ayrıca, bir not sadece yazıya dayalı olarak. Model.objects.create (** data_dict) kullanırken kaydetme yöntemini çağırmanız gerekmez. Muhtemelen bunu zaten biliyorsunuz ama sadece bir kafa. –

+3

Daha önce “objects.create” yöntemini kullanmamıştım, bu yüzden bana yeni bir şey öğrettin. – Alasdair

+2

ayrıca objects.create, yeni modele bir işaretçi döndürür, geçerli bir pk ile doldurulur. Bu, ilgili modelleri oluşturmak için hemen kullanabileceğiniz anlamına gelir. –

1

Doğrudan değil soruya bir cevap, ama bu kod bana doğru cevap içine güzelce kurtarmak dicts yaratılmasına yardım bulabilirsiniz. Bu veriler json'a aktarılacaksa yapılan tür dönüşümleri gereklidir.

umarım bu yardımcı olur:

#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) 
İlgili konular