我有一个问题,当我遇到一些非常严重的事情时,我认为我是通过我的系统,我有一个名为lpm_case的表,这是由lpm_bill引用,lpm_bill引用lpm_payment,如下所示:
db.define_table('lpm_case',
Field('title', 'string', requires=IS_NOT_EMPTY()),
Field('case_number'),
Field('practice_area', requires=IS_IN_SET(practice_area, multiple=False), default=practice_area[0]),
Field('opening_date', 'date', requires=IS_DATE(format=T('%Y-%m-%d')), default=datetime.now()),
Field('case_description', 'text', requires=IS_NOT_EMPTY()),
Field('case_stage', requires=(IS_IN_SET(stage, multiple=False)), default='Investigation'),
Field('case_status', requires=IS_IN_SET(status, multiple=False), default=status[0]),
Field('judge_name'),
Field('privacy', requires=(IS_IN_SET(('only me', 'public'))),
widget=SQLFORM.widgets.radio.widget),
auth.signature)
db.define_table('lpm_bill',
Field('matter_case', 'references lpm_case'),
Field('bill_schedule', requires=IS_IN_SET(BILLING_SCHEDULES, multiple=False), default=BILLING_SCHEDULES[0]),
Field('bill_scale', requires=IS_IN_SET(BILLING_SCALE, multiple=False), default=BILLING_SCALE[0]),
Field('service_name', requires=IS_NOT_EMPTY()),
Field('service_description', 'text', requires=IS_NOT_EMPTY()),
Field('service_charge', 'double', requires=IS_NOT_EMPTY(), default=0),
Field('fees_paid', 'double', default=0),
Field('status', requires=IS_IN_SET(BILL_STATUS, multiple=False), default=BILL_STATUS[0]),
Field('service_tax', 'double', requires=(IS_NOT_EMPTY()), default=0),
auth.signature)
db.define_table('lpm_payment',
Field('service_bill', 'references lpm_service_bill', writable=False, readable=False),
Field('payment_title'),
Field('payment_method', requires=IS_IN_SET(PAYMENT_METHOD, multiple=False), default=PAYMENT_METHOD[0]),
Field('trans_rec_num', requires=IS_NOT_EMPTY()),
Field('payment_date', 'date', requires=IS_DATE(format=T('%Y-%m-%d')), default=datetime.now()),
Field('payment_amount', 'double', requires=(IS_NOT_EMPTY()), default=0),
auth.signature)
现在我在视图中的某个地方有一个ajax回调,允许我从lpm_case中删除一个给定的记录,它只将记录id解析为执行删除的控制器函数,这样可以正常工作 . 记录从lpm_case表中删除,下面是控制器功能
def delete_case():
var = request.get_vars
id = var.id
if var:
db(db.lpm_case.id == id).delete()
redirect(URL('list_cases'))
问题是CASCADING没有发生我希望lpm_bill中附加到记录的所有其他记录我已经从lpm_case中删除,默认情况下也会删除lpm_payment附加到lpm_bill中删除的所有记录 . 但是这不会发生导致破坏参考,因此我得到一些票,但是当我从终端去postgres并直接运行SQL语句来删除lpm_case记录时,CASCADING至少可以工作 . 有人可以帮助我解决这个让我跑得落后的简单事情吗?谢谢