Buenas Djangonautas.
Duvida referente a Properties e Models:
De acordo com o que pude entender sobre o conceito de properties, são uma forma mais elegante e prática usada para substituir getters e setters. Ótimo até ai sempre usei properties.
Mas o real propósito de seu uso seria manter públicos os atributos da classe, no caso em que usamos o propertie, alterando assim somente o nome do atributo e usando o seu nome original na property criada.
Exemplo:
# Model normal, sem necessidade de properties
class Carro(models.Model):
modelo = models.CharField(max_length=100)
rodas = model.IntegerField(default=4)
passageiros = model.IntegerField(default=0)
# a partir de um dado momento tive necessidade de ter um get e um set para algum atributo, então criei o propertie
class Carro(models.Model):
modelo = models.CharField(max_length=100)
rodas = model.IntegerField(default=4)
_passageiros = model.IntegerField(default=0, db_column='passageiros')
def _get_passageiros(self)
return self._passageiros = p
def _set_passageiros(self, p)
self._passateiros = p
passageiros = property(_get_passageiros, _set_passageiros)
Neste ultimo caso, como eu ja tenho outros casos de uso onde uso o filtro passageiros ( ex: Carro.objetcs.filter(passageiros=5) ) então optei por alterar o nome do atributo e deixar a property com o nome original. Nos casos comuns onde apenas leio a propertie passageiros funciona normalmente, mas o django não deixa usar ela em um nenhum filter.
Como poderia solucionar isto sem necessidade de alterar os nomes do atributo e da property?