2
私はFlask-AdminとSQLAlchemyを使用しており、リストビューにカスタムの並べ替え可能フィールドを作成するのに苦労しています。私は、ユーザーと、このような写真のモデル:Flask-Adminのカスタムとソート可能な列
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
photos = db.relationship('Photo', backref='user', lazy='dynamic', cascade='all, delete-orphan')
class Photo(db.Model):
__tablename__ = 'photos'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), index=True)
filename = db.Column(db.String(128))
publish = db.Column(db.Boolean, index=True)
date = db.Column(db.DateTime, default=datetime.now)
私は、カスタムビュー(UserView)を作成し、「試験」というカスタムフィールドを作成して、写真の数が含まれるように、それを書き換えるcolumn_formattersを使用しています。結果は正しいが、フィールドはソートできない。これを解決する別の方法がありますか?
class UserView(sqla.ModelView):
column_list = ('username', 'test')
def _count_formatter(view, context, model, name):
return model.photos.count()
column_formatters = {
'test': _count_formatter
}
def is_accessible(self):
return login.current_user.is_authenticated
"@hybrid_property"と "@ number_of_photos.expression"の違いがわかりません。それを詳しく教えてください。それとは別に、正確に動作するはずですが、 "number_of_members"は "number_of_photos"に名前を変更する必要があります。 – NeoID
私はtypoを修正しました。(実際の 'ModelView'を使ってローカルアプリケーションでテストしました。) 私は文書を理解するまで、 '@ number_of_photos.expression'部分は' number_of_photos(self) 'メソッドのPythonコードが実際のSQL式にどのように変換するかを定義しています。 – Dauros