Trong SQLAlchemy, một hybrid attribute hoặc là một phương pháp property hay áp dụng cho một lớp ORM ánh xạ,Django ORM có tương đương với thuộc tính Hybrid của SQLAlchemy không?
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)
Điều này cho phép các hành vi khác nhau ở cấp lớp và ví dụ, do đó làm cho nó đơn giản để đánh giá câu lệnh SQL bằng cách sử dụng cùng mã,
>>> 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
Bây giờ trong Django, nếu tôi có một tài sản trên một mô hình,
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)
Đó là understanding mà tôi có thể không làm như sau,
Person.objects.filter(full_name="John Cadengo")
Có một tương đương với thuộc tính lai SQLAlchemy trong Django của tôi? Nếu không, có lẽ có một cách giải quyết chung?