我有一个问题,当我遇到一些非常严重的事情时,我认为我是通过我的系统,我有一个名为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至少可以工作 . 有人可以帮助我解决这个让我跑得落后的简单事情吗?谢谢