2015-04-12 2 views
3

Мне нужно получить список planes и все их соответствующие bookings, в идеале - список планов, в которых каждая плоскость имеет список заказов в качестве одного из своих свойств, поэтому его можно легко кодировать json , Как я могу сделать это с помощью SQLAlchemy? Я подозреваю, что SQLAlchemy обладает некоторыми мощными функциями, чтобы сделать это проще, я бы предпочел не делать 2 запроса и обрабатывать результаты.SQLAlchemy от одного до большого результата запроса

Например результат:

Plane 
- id:  -- 1 
- name:  -- Eagle Bravo 
- bookings: -- Booking1, Booking2, Booking3 

Plane 
- id:  -- 2 
- name:  -- Charlie Bravo 
- bookings: -- Booking4, Booking5, Booking6 

Plane 
- id:  -- 3 
- name:  -- Alpha Bravo 
- bookings: -- Booking7, Booking8, Booking9 

Plane и Бронирование модели:

class Booking(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    start_date = db.Column(db.DateTime) 
    end_date = db.Column(db.DateTime) 
    person_id = db.Column(db.Integer, db.ForeignKey('person.id')) 
    person = db.relationship('Person', backref=db.backref('Bookings', lazy='dynamic')) 
    plane_id = db.Column(db.Integer, db.ForeignKey('plane.id')) 

    def __init__(self, start_date, end_date, person_id): 
     self.start_date = start_date 
     self.end_date = end_date 
     self.person_id = person_id 

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

    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 


class Plane(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(80)) 

    def __init__(self, name): 
     self.name = name 

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

    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 

ответ

2

Добавить один ко многим отношений в классе Plane следующим образом. models.py

class Plane(db.Model): 
id = db.Column(db.Integer, primary_key=True) 
name = db.Column(db.String(80)) 
bookings=db.relationship('Bookings', backref='plane', lazy='dynamic') 

Вы можете получить все ваши заказы на самолете пропускания самолеты переменной на ваш взгляд, следующий

controller.py

@app.route('\list) 
def plane_list(): 
    planes=Plane.query.all() 
    return render_template('index.html', planes=planes) 

Views.py

{% for plane in planes %} 
    {{plane.id}] 
    {{plane.name}} 
    {%for booking in plane.bookings.all()%} 
     {{booking.id}},  

    {%endfor%} 
{%endfor%} 

Документ здесь http://techarena51.com/index.php/one-to-many-relationships-with-flask-sqlalchemy/ Я написал подобный код для одной должности многих замечаний

https://github.com/Leo-g/flask-blog/blob/master/app/templates/single.html https://github.com/Leo-g/flask-blog/blob/master/app/models.py

Смежные вопросы