Jian
Jian

Reputation: 47

Select records from two SQLFORM.grid and insert the records into the third table

I want to insert multi records into my belongs table, while the records are selected from two tables by SQLFORM.grid. my table:

db.define_table('problem',
                Field('title','string',unique=True,length=255),
                format = '%(title)s')
db.define_table('tasks',
                Field('title','string',unique=True,length=255),
                format = '%(title)s')
db.define_table('belongs',
                Field('task_id','reference tasks'),
                Field('problem_id','reference problem'))

select some records from problem table and select one record from tasks table then insert into belongs table. Can it be realized by SQLFORM.grid ?

def problemtask():
    form=SQLFORM.grid(db.problem,selectable =lambda ids:insert(ids,ids1))
    form1=SQLFORM.grid(db.tasks,selectable = lambda ids1 :insert(ids,ids1) )
    return dict(form=form,form1=form1)
def insert(ids,ids1):

thanks!

Upvotes: 0

Views: 631

Answers (1)

Jian
Jian

Reputation: 47

Select one record from one table then select some records from another table,last insert the combination into the third table.

def showtask():
        id=request.args(0,cast=int)#id为course_id
        db.tasks._common_filter = lambda query: db.tasks.course_id ==id
        links=[lambda row:A('createproblem',_href=URL("default","addproblem",args=[row.id])),
               lambda row:A('showproblem',_href=URL("default","showproblem",args=[row.id]))]
        form=SQLFORM.smartgrid(db.tasks,args=request.args[:1],links=links,linked_tables=[''],csv=False)
        return dict(form=form)

def mulassignproblem():
    taskid=request.args(0,cast=int)
    form=SQLFORM.grid(db.problem,args=request.args[:1],selectable = lambda ids :mulproblem(ids,taskid))
    return dict(form=form)

def mulproblem(ids,taskid):
    problemids=ids
    taskids=taskid
    for  problemid in problemids:
        if  db((db.belongs.problem_id==problemid)&(db.belongs.task_id==taskids)).count():
            pass
        else:
            db.belongs.insert(task_id=taskid,problem_id=problemid)

Upvotes: 1

Related Questions