Do not do dal queries in a try..except. If the db query fails it may not be
automatically rolled back.
I think you want:
category = request.args(0) and db.blog_cat(slug=request.args(0))
query = db.blog_post.blog_cat.contains(category.id) if category else
db.plog_post
posts = db(query).select(orderby=~db.blog_post.created_on)
Now notice that this works db.blog_post.blog_cat.contains(category.id)
and it may be fine for a small number of posts but for many posts you may
want to use a link table to implement many2many.
On Saturday, 12 July 2014 05:04:45 UTC-5, Ruud Schroen wrote:
>
> Hi group!
>
> I'm building a small blog where the user has the ability to assign
> multiple categories to blog posts.
> My quesition is.. what is the proper way to query those posts?
>
> db.define_table('blog_cat',
> Field('name', 'string', label=T('Name of the category')),
> Field('slug', compute=lambda r: IS_SLUG()(r['name'])[0]),
> Field('description', 'string', label=T('Describe what will
> be inside this category'))
> )
>
> db.define_table('blog_post',
> Field('blog_cat', 'list:reference blog_cat',
> requires=IS_IN_DB(db,db.blog_cat.id,'%(name)s', multiple=True),
> label=T('Chose one or more categories')),
> Field('title', 'string', label=T('Name the title of your
> post')),
> Field('body', 'text', label=T('Your post'),
> widget=ckeditor.widget),
> auth.signature
> )
>
> I created two categories and two posts. One post only has one category
> while the other has two.
>
> This is my query:
>
> try:
> category = db(db.blog_cat.slug==request.args(0)).select().first().id
> posts = db(db.blog_post.blog_cat ==
> category).select(orderby=~db.blog_post.created_on)
> except:
> posts = db(db.blog_post.id>0).select(orderby=~db.blog_post.created_on)
>
> The problem is when a post has multiple categories, it is not shown. How
> do I solve this?
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.