python - ¿Django ORM tiene un equivalente al atributo híbrido de SQLAlchemy?
python orm (1)
En SQLAlchemy , un atributo híbrido es una propiedad o método aplicado a una clase mapeada ORM,
class Interval(Base):
__tablename__ = ''interval''
id = Column(Integer, primary_key=True)
start = Column(Integer, nullable=False)
end = Column(Integer, nullable=False)
def __init__(self, start, end):
self.start = start
self.end = end
@hybrid_property
def length(self):
return self.end - self.start
@hybrid_method
def contains(self,point):
return (self.start <= point) & (point < self.end)
@hybrid_method
def intersects(self, other):
return self.contains(other.start) | self.contains(other.end)
Esto permite comportamientos distintos en los niveles de clase e instancia, lo que simplifica la evaluación de sentencias SQL utilizando el mismo código,
>>> i1 = Interval(5, 10)
>>> i1.length
5
>>> print Session().query(Interval).filter(Interval.length > 10)
SELECT interval.id AS interval_id, interval.start AS interval_start,
interval."end" AS interval_end
FROM interval
WHERE interval."end" - interval.start > :param_1
Ahora en Django , si tengo una propiedad en un modelo,
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def _get_full_name(self):
"Returns the person''s full name."
return ''%s %s'' % (self.first_name, self.last_name)
full_name = property(_get_full_name)
Tengo entendido que no puedo hacer lo siguiente,
Person.objects.filter(full_name="John Cadengo")
¿Hay un equivalente del atributo híbrido de SQLAlchemy en Django? Si no, ¿hay quizás una solución común?
Tiene razón en que no puede aplicar el filtro django queryset basado en las propiedades de python, porque el filtro opera a nivel de base de datos. Parece que no hay un equivalente de los atributos híbridos de SQLAlchemy en Django.
Por favor, eche un vistazo aquí y aquí , puede ser que lo ayude a encontrar una solución alternativa. Pero, creo que no hay una solución genérica.