2009-10-09 18 views
23

Wygląda na to, że powinno być martwe proste, więc muszę czegoś przegapić. Chcę tylko ustawić wartość pola w mojej instancji modelu według nazwy. Powiedz, że mam:Jak ustawić pole modelu django według nazwy?

class Foo(Model): 
    bar = CharField() 

f = Foo() 

Chcę ustawić wartość paska według nazwy, a nie przez uzyskanie dostępu do pola. Więc coś takiego:

f.fields['bar'] = 'BAR" 

zamiast

f.bar = 'BAR' 

Próbowałem setattr ale nie utrzymują wartość w bazie danych. Próbowałem także przechodzić przez _meta.fields, ale dostałem różne błędy po drodze.

Odpowiedz

48

Jeśli zmienisz wartość przez setattr, musisz pamiętać o zapisaniu modelu po jego modyfikacji. Zostałem ugryziony w przeszłości, gdzie zmieniłem wartości, ale zapomniałem zapisać model i otrzymałem taki sam wynik.

setattr(f, 'bar', 'BAR') 
f.save() 
+10

DOH! Tak, zapomniałem zapisać. Teraz ukryję się ze wstydem ... –

13

Być może będziemy musieli zobaczyć więcej kodu.

setattr(f, 'bar', 'BAR') 

powinien działać tak, jak Django robi to wewnętrznie.

Upewnij się, że dzwonisz również "zapisz".

Powiązane problemy