Try something like this. (Untested but should be close)
form = SQLFORM.factory(Field("category",label="Book Category",
requires=IS_IN_DB(db.category, 'category.id', 'category.name',
error_message="Please pick a category from the list")))
if form.accepts(request.vars, session, keepvalues=True):
powerTable = plugins.powerTable
powerTable.datasource =
db(db.book.category==request.vars.category).select(db.category.ALL)
#DAL query!
powerTable.columns=['book.name', 'book.code']
books = powerTable.create()
else:
books = None
return dict(form = form, books = books)