- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 SQLFORM.smartgrid 显示表 (service_types)
中的记录列表。智能网格的每一行都有一个删除链接/按钮来删除记录。我想在 smartgrid/web2py 实际删除记录之前执行一些代码,例如我想知道是否有子记录(services
表)引用该记录,如果有,则闪烁一条消息告诉用户该记录无法删除。这是如何完成的?
db.py
db.define_table('service_types',
Field('type_name', requires=[IS_NOT_EMPTY(), IS_ALPHANUMERIC()]),
format='%(type_name)s',
)
db.define_table('services',
Field('service_name',requires=[IS_NOT_EMPTY(),IS_NOT_IN_DB(db,'services.service_name')]),
Field('service_type','reference service_types',requires=IS_IN_DB(db,db.service_types.id,
'%(type_name)s',
error_message='not in table',
zero=None),
ondelete='RESTRICT',
),
Field('interest_rate','decimal(15,2)',requires=IS_DECIMAL_IN_RANGE(0,100)),
Field('max_term','integer'),
auth.signature,
format='%(service_name)s',
)
db.services._plural='Services'
db.services._singular='Service'
if db(db.service_types).count() < 1:
db.service_types.insert(type_name='Loan')
db.service_types.insert(type_name='Contribution')
db.service_types.insert(type_name='Other')
Controller
def list_services():
grid = SQLFORM.smartgrid(db.services
, fields = [db.services.service_name,db.services.service_type]
)
return locals()
查看
{{extend 'layout.html'}}
{{=grid}}
最佳答案
有两个选项。首先,deletable
参数可以是一个函数,它接受给定记录的 Row
对象并返回 True
或 False
> 指示该记录是否可删除。如果返回False
,则不会显示该记录的“删除”按钮,服务器上也不允许执行删除操作。
def can_delete(row):
return True if [some condition involving row] else False
grid = SQLFORM.smartgrid(..., deletable=can_delete)
其次,有一个 ondelete
参数,它接受 db
Table
对象和记录 ID。它在删除操作之前调用,因此为了防止删除,您可以在该函数中进行重定向:
def ondelete(table, record_id):
record = table(record_id)
if [some condition]:
session.flash = 'Cannot delete this record'
redirect(URL())
grid = SQLFORM.smartgrid(..., ondelete=ondelete)
请注意,如果网格是通过 Ajax 组件加载的,因此其操作是通过 Ajax 执行的,则在 ondelete
方法中使用 redirect
(如上所示)将无法正常工作,因为重定向将不起作用,并且表行仍将从浏览器的网格中删除(即使数据库记录未删除)。在这种情况下,另一种方法是向浏览器返回非 200 HTTP 响应,这将阻止客户端 Javascript 从表中删除该行(删除仅在 Ajax 请求成功时发生)。我们还应该设置 response.flash
而不是 session.flash
(因为我们没有重定向/重新加载整个页面):
def ondelete(table, record_id):
record = table(record_id)
if [some condition]:
response.flash = 'Cannot delete this record'
raise HTTP(403)
请注意,deletable
和 ondelete
参数都可以是以表名作为键的字典,因此您可以为可能从智能网格链接的不同表指定不同的值.
最后,请注意删除 URL 类似于 /appname/list_services/services/delete/services/[record ID]
。因此,在 Controller 中,您可以通过检查 request.args 中的 'delete'
来确定是否正在请求删除。在这种情况下,request.args[-2:]
表示表名称和记录 ID,您可以使用它们来执行任何检查。
关于python - web2py:如何使用 SQLFORM.smartgrid 在删除之前执行指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175545/
我正在使用 web2py 框架,并且我正在尝试创建一个没有提交按钮的 SQLFORM。我有多个表单,它们具有共同的字段,因此我无法使用 SQLFORM.factory(),并且我希望只有一个带有提交按
我有一个应用程序,用户必须从 mysql 数据库中选择他/她想要的表,并且它在 SQLFORM 网格中变得可见。然而,当用户尝试导出表格(例如以 csv 格式)时,页面会重定向到输入表单,并且仅当您第
我想插入一个包含两个字段的表单:类(class)名称,teacher_id(引用auth_user),但是teacher_id字段显示auth_user中的所有id,我只想在下拉列表中显示roes=t
我刚刚开始使用 web2py,确实无法通过 SQLFORM.grid 部分。我的数据位于 mySQL 数据库中,我正在尝试调用它的查询。 我定义了表,但没有 id 字段,因为我将其称为“itemNum
大家好,我的问题是 Pt_br 语言中有很多 ç´^ 和其他重音符号,我有一个 sqlform,其中有 Tipo de Servico 但我需要在 html 上显示正确的字母 -> Tipo de S
如何修改我的 SQLFORM.grid 中的编辑 View - 输入字段的大小、下拉菜单等。文档写得不好,所以任何示例都会有很大帮助。谢谢 最佳答案 SQLFORM.grid 在您的数据库模型中使用分
web2py grid/smartgrid 文档有很长的参数列表,但对它们的描述却很稀疏。例如, fields 参数只是说 fields is a list of fields to be fetch
我正在关注 Web2py 的关于 HTML 中的 SQLFORM 的书。 http://web2py.com/books/default/chapter/29/07#SQLFORM 但是,我似乎无法弄
我想在我的belongs表中插入多条记录,而这些记录是通过SQLFORM.grid从两个表中选择的。我的 table : db.define_table('problem',
我使用 SQLFORM.smartgrid 显示表 (service_types) 中的记录列表。智能网格的每一行都有一个删除链接/按钮来删除记录。我想在 smartgrid/web2py 实际删除记
假设我使用 SQLFORM.factory 构造一个表单,如下所示: my_fields = [Field('field1', default='some value'),
我正在制作一个 web2py 应用程序,我在模型 db.py 文件中定义了两个 mysql 表: db.define_table('table1', Field('id','integer')
这就是我在 db.py 中定义表的方式: db.define('other_other_table1', Field('other_other1_field1', 'string'
我想添加一个 java 脚本来在到达页面底部时单击一个按钮...代码是 function getScrollXY() { var scrOfX = 0, scrOfY = 0; if
def index(): gridHome = SQLFORM.grid(db.games, editable=False, create=False, csv=False, deletable=Fa
是否有一种快速方法可以让 SQLFORM.grid 不显示其条目的 id 字段值(即 SQLFORM() 的“showid = False”的效果)?我知道您可以通过明确指定要显示的字段来做到这一点,
制作 SQLFORM.grid 标题的最佳方法是什么。我尝试在字段标题中插入“\n”并传递列表,但都不起作用。 最佳答案 您需要插入 ,您可以执行以下操作: 使用 HTML 帮助器: CAT('Lin
我已经开始将 web2py 用于 Web 应用程序,并尝试使用 SQLFORM.grid(...) 来显示我的 db-table 数据之一的分页列表,如以下最小示例所示. grid=SQLFORM.g
我想在我的 View 中有一个登录和注册表单的自定义 View ,同时又不失去 SQLFORM 的功能。如何更改 View 中表单的“外观”。请给我一些指示,比如我应该修改哪个 CSS 文件。我不了解
给定 Controller 中的这个 SQLFORM: form = SQLFORM.factory(db.source_server, db.target_server) 使用下表定义: db.de
我是一名优秀的程序员,十分优秀!