Отношения Flask SQLAlchemy order_by

Я работаю с приложением Flask, где у меня есть модель LargeGroupAttendance, которая ссылается на другую модель под названием Attendee. Я пытаюсь запросить все объекты LargeGroupAttendance, соответствующие определенным критериям, но пытаюсь отсортировать их по столбцу модели Attendee — возможно ли это? Вот две модели ниже:

""" Attendeee Class """
class Attendee(Base):
    __tablename__ = 'attendee'

    id = Column(Integer, primary_key=True)
    first_name = Column(String(200))
    last_name = Column(String(200))
    year = Column(String(200))
    email = Column(String(100), unique=True)
    dorm = Column(String(100))

    def __init__(self, first_name, last_name, year, email, dorm):
        self.first_name = first_name
        self.last_name = last_name
        self.year = year
        self.email = email
        self.dorm = dorm

    def __repr__(self):
        return '<Attendee %r>' % self.first_name

""" Large Group Attendance Class """
class LargeGroupAttendance(Base):
    __tablename__ = 'large_group_attendance'

    id = Column(Integer, primary_key=True)
    first_time = Column(Integer)

    large_group_id = Column(Integer, ForeignKey('large_group.id'))
    large_group = relationship("LargeGroup", backref=backref('large_group_attendance', order_by=id))

    attendee_id = Column(Integer, ForeignKey('attendee.id'))
    attendee = relationship("Attendee", backref=backref('large_group_attendance', order_by=id))

Нужно ли мне что-то добавить в мой класс участников, чтобы это стало возможным? И вот запрос, который я пробовал раньше, но он не дал результата (ошибок тоже..). Где я ошибаюсь?

    attendance_records = db.session.query(LargeGroupAttendance).filter_by(large_group_id=event_id).order_by(desc(LargeGroupAttendance.attendee.first_name)) 

person phouse512    schedule 10.03.2014    source источник
comment
возможный дубликат SQLAlchemy: как заказать результаты запроса (order_by) в поле отношения?   -  person plaes    schedule 09.06.2015


Ответы (1)


Я думаю, вам нужно добавить соединение к вашему запросу, что-то вроде этого:

.join(LargeGroupAttendance.attendee)

чтобы окончательный запрос выглядел так:

attendance_records = (db.session.query(LargeGroupAttendance).
    filter_by(large_group_id = event_id).
    join(Attendee, LargeGroupAttendance.attendee).
    order_by(desc(Attendee.first_name))
    )

См. SQLAlchemy: как упорядочить результаты запроса (order_by) в поле отношения? для более подробного объяснения

person bwbrowning    schedule 10.03.2014
comment
Спасибо большое! Это именно то, что мне было нужно! - person phouse512; 11.03.2014