2009-10-15 1 views

Trả lời

143

Nếu titlebody là các trường trong mô hình của bạn, sau đó you can deliver the keyword arguments in your dictionary using the ** operator.

Giả sử mô hình của bạn được gọi là MyModel:

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

Đối với câu hỏi thứ hai của bạn, từ điển đã được các lập luận chính thức. Một lần nữa, extraextra2 phải là các trường trong mô hình.

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

Cảm ơn, đó là chính xác những gì tôi đang tìm kiếm để làm. Ngoài ra, như một lưu ý phụ chỉ dựa trên bài viết của bạn. Bạn không phải gọi phương thức lưu khi sử dụng Model.objects.create (** data_dict). Bạn có thể đã biết điều này nhưng chỉ là một người đứng lên. –

+3

Tôi đã không sử dụng phương pháp 'objects.create' trước đây, vì vậy bạn đã dạy tôi điều gì đó mới mẻ. – Alasdair

+2

cũng objects.create trả về một con trỏ đến mô hình mới, với một pk hợp lệ điền vào. Điều này có nghĩa là bạn có thể sử dụng ngay lập tức nó để xây dựng các mô hình liên quan. –

1

Không trực tiếp một câu trả lời cho câu hỏi, nhưng tôi tìm thấy mã này đã giúp tôi tạo ra dicts rằng lưu độc đáo vào câu trả lời đúng. Các loại chuyển đổi được thực hiện là bắt buộc nếu dữ liệu này sẽ được xuất sang json.

Tôi hy vọng điều này sẽ giúp:

#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)