Pegase745 / sqlalchemy-datatables

SQLAlchemy integration of jQuery DataTables >= 1.10.x (Pyramid and Flask examples)
MIT License
159 stars 67 forks source link

multiple level support #12

Closed tanyewei closed 8 years ago

tanyewei commented 10 years ago

model:

roles_users = db.Table('roles_users',
                       db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
                       db.Column('role_id', db.Integer(), db.ForeignKey('roles.id')))
#Base = declarative_base()

# Role model for Flask-Security
class Roles(db.Model, RoleMixin):
    #__tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))

# User model for Flask-Security
class Users(db.Model, UserMixin):
    #__tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    username = db.Column(db.String(100), unique=True)
    confirmed_at = db.Column(db.DateTime)
    last_login_at = db.Column(db.DateTime)
    current_login_at = db.Column(db.DateTime)
    last_login_ip = db.Column(db.String(50))
    current_login_ip = db.Column(db.String(50))
    login_count = db.Column(db.Integer)

    roles = db.relationship('Roles', secondary=roles_users, backref=db.backref('users', lazy='dynamic'))
    orders = db.relationship('Orders', backref='users')

class Orders(db.Model):
    #__tablename__ = 'order'

    order_id = db.Column(db.Integer, primary_key=True)
    #user_name = db.Column(db.String(30), nullable=False)
    order_date = db.Column(db.DateTime, nullable=False, default=datetime.now())
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    user = db.relationship(Users, backref='user_order')
    order_items = db.relationship("OrderItem", cascade="all, delete-orphan", backref='orders')
    items = association_proxy("order_items", "item")

class Item(db.Model):
    #__tablename__ = 'item'
    item_id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(30), nullable=False)
    price = db.Column(db.Float, nullable=False)

    def __init__(self, description, price):
        self.description = description
        self.price = price

    def __repr__(self):
        return 'Item(%r, %r)' % (
            self.description, self.price
        )

class OrderItem(db.Model):
    #__tablename__ = 'orderitem'
    order_id = db.Column(db.Integer, db.ForeignKey('orders.order_id'), primary_key=True)
    item_id = db.Column(db.Integer, db.ForeignKey('item.item_id'), primary_key=True)
    price = db.Column(db.Float, nullable=False)

    def __init__(self, item, price=None):
        self.item = item
        self.price = price or item.price

    item = db.relationship(Item, lazy='joined')

In [10]: a.order_items Out[10]: [<test.OrderItem at 0x7fe7be15c150>, <test.OrderItem at 0x7fe7be185690>, <test.OrderItem at 0x7fe7be185890>]

a.order_items[0].item.price