Ich versuche, SQLAlchemy-DataTables zu verwenden, um serverseitige Verarbeitung der Daten für das jQuery DataTables-Plug-in auszuführen, aber ein Problem beim Erstellen des DataTables-Spaltenmodells aufgetreten .Verwenden von SQLAlchemy-DataTables mit mehreren Beziehungen zwischen denselben Tabellen
Meine Datenmodelle in etwa so aussehen:
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(64))
#...
creator_id = db.Column(db.Integer, db.ForeignKey('users.id'))
creator = db.relationship('User', foreign_keys=[creator_id])
created_time = db.Column(db.DateTime(), default=datetime.utcnow)
last_modifier_id = db.Column(db.Integer, db.ForeignKey('users.id'))
last_modifier = db.relationship('User', foreign_keys=[last_modifier_id])
modified_time = db.Column(db.DateTime(), default=datetime.utcnow)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
#...
Meine views.py Datei (ja, das ist eine Anwendung Flask) sieht dann so etwas wie:
@posts.route('/data')
def data():
# Column definition for SQLAlchemy-DataTables
columns = [
ColumnDT(Post.id),
ColumnDT(Post.subject),
ColumnDT(User.username), # for creator
ColumnDT(User.username), # for last modifier... this is the problem
ColumnDT(Post.modified_time)
]
# Query definition
query = db.session.query().\
select_from(Post).\
outerjoin(User, Post.creator_id==User.id).\
outerjoin(User, Post.last_modifier_id==User.id) # second error here
# Request parameters
params = request.args.to_dict()
# Instantiating a DataTable for the query and table needed
rowTable = DataTables(params, query, columns)
# Returns DataTable JSON
return jsonify(rowTable.output_result())
Es gibt zwei Probleme mit der Code, den ich Guidance verwenden könnte:
- Was ist der beste Weg, um die mehrere Joins zwischen den gleichen Tabellen in der Abfrage d zu tun Definition?
- Wie richte ich die Spaltendefinitionen so ein, dass sie auf dasselbe Datenmodellattribut (User.username) für mehrere Beziehungen verweisen (creator, last_modifier)?