我可以在视图类中拥有这样的属性:
class MyExampleView(ModelView):
@property
def can_edit(self):
# Return True or False based on some conditional logic
如何访问行的属性,以便例如可以有条件地在表中显示编辑列,也许如果行的is_active
属性为True或False。
答案 0 :(得分:0)
您可以通过增强一些模板操作来实现这一点,在其中添加了一种检查行可用性的方法:
RegisterResult()
然后,您需要在from flask_admin.model import template
class AccessMixin:
def has_access(self, row):
raise NotImplementedError()
class ViewRowAction(template.ViewRowAction, AccessMixin):
def has_access(self, row):
return True
class EditRowAction(template.EditRowAction, AccessMixin):
def has_access(self, row):
return row.is_active
class DeleteRowAction(template.DeleteRowAction, AccessMixin):
def has_access(self, row):
return row.is_active
模板中覆盖list_row_actions
块以使用此新方法:
list.html
然后您需要模型类来使用覆盖的行操作和列表模板:
{% extends 'admin/model/list.html' %}
{% block list_row_actions scoped %}
{% for action in list_row_actions %}
{% if action.has_access(row) %}
{{ action.render_ctx(get_pk_value(row), row) }}
{% endif %}
{% endfor %}
{% endblock %}
请注意,原始的from flask_admin.contrib.sqla.view import ModelView
class MyExampleView(ModelView):
list_template = 'app_list.html'
def get_list_row_actions(self):
return (
ViewRowAction(),
EditRowAction(),
DeleteRowAction(),
)
方法使用get_list_row_actions
,can_view_details
,can_edit
,can_delete
和details_modal
属性来定义已使用动作的列表。您可以通过重写此逻辑来丢弃它。
这也不会阻止用户实际编辑或删除对象(例如,通过在浏览器中手动键入编辑视图URL)。您需要在视图方法中实现访问权限检查,例如:
edit_modal