2011-10-27 28 views
6

Czy jest jakiś sposób zrobienia tego w ustawiaczu właściwości niestandardowych django?Pola modelu Django. Niestandardowy ustawnik wartości pola

class MyModel(models.Model): 
    myfield = models.CharField(length = 250) 

    @myfield.setter 
    def set_password(self, value): 
     self.password = encrypt(value) 
+1

ten artykuł Jamesa Benett daje dobry pomysł na howto http://www.b-list.org/weblog/2006/aug/18/django-tips-using-properties-models-and-manager/ –

+0

related/dupe: http://stackoverflow.com/questions/2898711/django-model-fields-getter-setter#11108157 – Matt

Odpowiedz

1

Będzie naprawdę ustawić wartość na zapisywania modelu, więc lepiej zastąpić save() metodę (ot użytkowania pre_save sygnału).

+0

Tak, Wiem. Ale interesują mnie tylko właściwości. –

1

Co jest nie tak z metodą?

instance.set_password('my_pw') 

Można użyć @property zdefiniować ustawiające: http://docs.python.org/library/functions.html#property

### Pasted from docs 

class C(object): 
    def __init__(self): 
     self._x = None 

    @property 
    def x(self): 
     """I'm the 'x' property.""" 
     return self._x 

    @x.setter 
    def x(self, value): 
     self._x = value 

    @x.deleter 
    def x(self): 
     del self._x 
+0

Przepraszam, ale chodzi o czyste właściwości klas. Nie o modelach django. –

+0

Przypuszczam, że mógłbyś mieć inną własność. Ale niesamowity pomysł. +1! Daj mi znać, jeśli znajdziesz rozwiązanie. –

Powiązane problemy