2011-12-17 26 views
36

Trong số views.py Tôi chỉ định giá trị trước khi lưu biểu mẫu. Tôi sử dụng để làm điều đó theo cách sau:Đối tượng không hỗ trợ lỗi gán mục

projectForm.lat = session_results['lat'] 
projectForm.lng = session_results['lng'] 

Bây giờ, kể từ khi danh sách các biến có một chút dài, tôi muốn để lặp qua session_results với vòng sau (như mô tả của Adam here):

for k,v in session_results.iteritems(): 
    projectForm[k] = v 

Nhưng tôi gặp lỗi 'Project' object does not support item assignment cho giải pháp vòng lặp. Tôi gặp khó khăn để hiểu tại sao. Project là lớp mô hình, mà tôi sử dụng cho ModelForm.

Cảm ơn sự giúp đỡ của bạn!

Trả lời

46

Lỗi có vẻ rõ ràng: đối tượng mô hình không hỗ trợ gán mục. MyModel.objects.latest('id')['foo'] = 'bar' sẽ ném cùng lỗi này.

Đó là một chút bối rối mà dụ mô hình của bạn được gọi là projectForm ...

Sao chép khối đầu tiên của mã trong một vòng lặp, bạn cần phải sử dụng setattr

for k,v in session_results.iteritems(): 
    setattr(projectForm, k, v) 
11

Một cách khác sẽ được bổ sung __getitem__, __setitem__ chức năng

def __getitem__(self, key): 
    return getattr(self, key) 

Bạn có thể sử dụng tự [phím] để truy cập ngay bây giờ.

Các vấn đề liên quan