我正在设计一个应用程序,通过在每次保存时对其进行备份来跟踪用户数据,以便它们可以恢复到旧版本。这就是我设置表定义的方式:
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。
提前致谢。
答案 0 :(得分:2)
如果您在第一次创建表时没有ondelete='SET NULL'
,则可能必须删除并重新创建表,或手动更改ON DELETE
操作,因为此更改可能不能通过web2py迁移自动生成。