Web2Py:如何停止删除引用的表?

时间:2014-05-30 17:15:13

标签: python database sqlite web2py

我正在设计一个应用程序,通过在每次保存时对其进行备份来跟踪用户数据,以便它们可以恢复到旧版本。这就是我设置表定义的方式:

db.define_table('Menu',
  Field('title', 'string', unique=True),
  Field('ver', 'float', readable=False, writable=False),
  Field('menu', 'text', requires=IS_NOT_EMPTY()),
  format='%(title)s'
)
db.define_table('Backups',
  Field('menu_ref', 'reference Menus', ondelete='SET NULL'),
  Field('title', 'string'),
  Field('ver', 'float'),
  Field('date_ref', 'datetime', default=datetime.utcnow(), readable=False, writable=False, label='Date'),
  Field('menu', 'text'),
  Field('user_ref', 'reference auth_user', default=auth.user_id, writable=False, readable=False),
  format='%(menu_ref.title)s'+' v.%(ver)s'
)

我遇到一个问题,每次删除菜单时,它都会删除引用它的所有备份。我看到解决这个问题的标准方法是将ondelete参数设置为'SET NULL',但这不起作用。我也尝试将备份中的menu_ref类型更改为'整数',并让它在菜单中引用正确的ID,但由于某种原因它仍会删除所有相关的行。有人知道你应该怎么制止这个吗?

我现在正在使用SQL Lite来测试我的应用程序,但如果相关的话,它将会被移到Google App Engine。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果您在第一次创建表时没有ondelete='SET NULL',则可能必须删除并重新创建表,或手动更改ON DELETE操作,因为此更改可能不能通过web2py迁移自动生成。