2011-12-17 12 views
36

Przypisuję wartości przed zapisaniem formularza. Kiedyś to zrobić w następujący sposób:Obiekt nie obsługuje błędu przypisania pozycji.

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

Teraz, ponieważ lista zmiennych trochę się długo, chciałem pętli nad session_results z poniższej pętli (opisany przez Adama here):

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

Ale pojawia się błąd 'Project' object does not support item assignment dla rozwiązania pętli. Mam problem z zrozumieniem, dlaczego. Project jest klasą modelu, której używam do ModelForm.

Dziękuję za pomoc!

Odpowiedz

46

Błąd wydaje się być jasny: obiekty modelu nie obsługują przypisania elementów. MyModel.objects.latest('id')['foo'] = 'bar' rzuci ten sam błąd.

To trochę mylące, że instancja modelu nazywa projectForm ...

Aby odtworzyć swój pierwszy blok kodu w pętli, trzeba użyć setattr

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

Innym sposobem byłoby dodanie __getitem__, __setitem__ funkcja

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

Możesz użyć self [klawisz], aby uzyskać dostęp teraz.

Powiązane problemy