[pyar] [django] Cambiando un atributo de un modelo para usar property ... ¿y con el admin qué hago?

Diego Mascialino diego en mascialino.com.ar
Dom Feb 10 06:32:39 -03 2019


El jue., 31 ene. 2019 a las 19:02, Facundo Batista (<
facundobatista en gmail.com>) escribió:

> Hola!
>
> Resulta que tengo un modelo en django que tiene el campo "foo".
>
> Pero resulta que quiero cambiarle el comportamiento por default,
> entonces renombro `foo` a `_foo`, y luego agrego un property onda...
>
>   def _get_foo(self):
>     return self._foo[3:]
>
>   def _set_foo(self, value):
>     self._foo = ">>>" + value
>
> Entonces, si alguien hace `Coso.foo = "bleh"`, realmente el campo en
> la base de datos tiene ">>>bleh".
>
> Hasta ahora, todo bien.
>
> El tema es, ¿qué hago con el admin?
>
> Yo quiero que cuando entre a una instancia de este modelo, por ejemplo
> la de recién, aunque en la DB tenga ">>>bleh", el admin me muestre
> "bleh". Y que si va el humano y pone "wat", termine ejecutándose el
> property para que la DB tenga ">>>wat".
>
> ¿Se puede? ¿Cómo?
>


Leyendo [0], me parece que lo que quere se resuleve usando un Field a tu
medida,

class FacuField(models.CharField):

    def pre_save(self, model_instance, add):
        return '>>>{}'.format(getattr(model_instance, self.attname))

    def from_db_value(self, value, expression, connection):
        return value[3:]

[0]
https://docs.djangoproject.com/en/2.1/howto/custom-model-fields/#preprocessing-values-before-saving


Abrazo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190210/29443ec8/attachment.html>


Más información sobre la lista de distribución pyar