In summary, post_delete would work if it attempted a delete using arg2
as the primary key (for CONTROL2) as opposed to using arg1 (which is
CONTROL1's primary key).

Thanks.

On Apr 27, 8:46 pm, ozwyzard <[email protected]> wrote:
> IS THERE ANY WAY TO CONSUME THE ARGUMENTS IN __before__ OR VIA SOME
> OTHER OVERRIDE?
>
> Sample nested URL: .../CONTROL1/arg1/CONTROL2/arg2
>
> In the overridden __before__ routine, I  added the lines that the
> default __before__ in CrudRestController does:
>
> def __before__(self, *args, *kw):
>     tmpl_context.menu_items = self.menu_items
>     tmpl_context.title = self.title
>     ... split the url ...
>     self.parent_arg = arg1
>
> With the above changes, the menu_items is None and avoids the
> exception in the template rendering.
>
> However, the post_delete() function in CrudRestController still gets
> all the original arguments and tries to delete the wrong record, since
> the *args passed to __before__ is a tuple and cannot be consumed by
> __before__ and the underlying model (for CONTROL2) has just 1 primary
> key v.i.z. arg2.  I.E. pks = [id] but args = (arg1, CONTROL2, arg2)
> and it tries to use arg1 as the primary key to CONTROL2 and fails.
>
>     @expose()  #CrudRestController source code
>     def post_delete(self, *args, **kw):
>         """This is the code that actually deletes the record"""
>         pks = self.provider.get_primary_fields(self.model)
>         d = {}
>         for i, arg in enumerate(args):
>             d[pks[i]] = arg
>         self.provider.delete(self.model, d)
>         redirect('./' + '../' * (len(pks) - 1))
>
> IS THERE ANY WAY TO CONSUME THE ARGUMENTS IN __before__ OR VIA SOME
> OTHER OVERRIDE?
>
> Thanks.
>
> On Apr 26, 11:25 pm, ozwyzard <[email protected]> wrote:
>
>
>
> > Thanks.  I was trying the __before__ method in the parent controller
> > as opposed to the leaf controller.  Once I overrode the __before__
> > method in the leaf (child) controller, I was able to get the nesting
> > working for get and get_all.  However, edit and delete fail in genshi
> > when trying to iterate through menu_items (even though I am not using
> > menu_items).  I have posted a separate post to ask where I can find
> > the source code for CrudRestController.
>
> > Module ?:19  in <Expression
> > u'iter(sorted(tmpl_context.menu_items.iteritems()))'>
> > <<    <div style="float:left; padding-left:0px;">
> >                <ul id="menu_items" py:if="hasattr(tmpl_context,
> > 'menu_items')">
> >                    <li py:for="lower, item in
> > sorted(tmpl_context.menu_items.iteritems())">
> >                      <a href="${'../' * (1 + value_of('pk_count', 1))}$
> > {lower}s/">$item.__name__</a>
> >                    </li>>>  <li py:for="lower, item in 
> > sorted(tmpl_context.menu_items.iteritems())">
>
> > Module genshi.template.eval:321 in lookup_attr         view
> > Module genshi.template.eval:405 in undefined         view
> > UndefinedError: '' has no member named "iteritems"
>
> > ==================
>
> > On Apr 6, 11:21 pm, Wesley Dyk <[email protected]> wrote:
>
> > > On Mon, Apr 5, 2010 at 6:20 PM, ozwyzard <[email protected]> wrote:
> > > > When using CRUDRestController, is there a way to implement REST style
> > > > URLs as follows?
> > > >    
> > > > http://website.com/controller_1/arg_11/arg_12/controller_2/arg_21/arg_22
>
> > > > It seems the CRUDRestController is not derived from
> > > > ObjectDispatchController, so the new TG2 'lookup' method does not
> > > > apply.  As a workaround, I am trying to implement the above by
> > > > instantiating controller2  within controller1's get_one() method.
>
> > > > References:
> > > >http://turbogears.org/2.0/docs/modules/tgcontroller.html#tg.controlle...
> > > >http://turbogears2.sourcearchive.com/documentation/2.0.1/controllers_...
>
> > > > Thanks.
>
> > > > --
> > > > You received this message because you are subscribed to the Google 
> > > > Groups "TurboGears" group.
> > > > To post to this group, send email to [email protected].
> > > > To unsubscribe from this group, send email to 
> > > > [email protected].
> > > > For more options, visit this group 
> > > > athttp://groups.google.com/group/turbogears?hl=en.
>
> > > I would check out this link on the RestController implementation of
> > > the same style.  The key is the __before__ method.  CrudRestController
> > > implements this method, so be sure to call it if you override it.
>
> > >http://turbogears.org/2.0/docs/main/RestControllers.html#nesting-reso...
>
> > > Wes
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "TurboGears" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/turbogears?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "TurboGears" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group 
> athttp://groups.google.com/group/turbogears?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to