Finally, I managed to make it work
The solution was to* pass the validator of the table field to the SELECT
helper of the widget* :
In HierarchicalSelect class, I replaced
opt=[OPTION(name, _value=key) for key,name in self.options]
sel = SELECT(opt,_id="%s_%s" % (self.tablename, self.fieldname),
_class=self.type,
_name=self.fieldname,
value=value)
with
opt=[OPTION(name, _value=key) for key,name in self.options]
sel = SELECT(opt,_id="%s_%s" % (self.tablename, self.fieldname),
_class=self.type,
_name=self.fieldname,
value=value,
requires=self.tablename.parent.requires)
And it works
Le mardi 10 décembre 2013 12:36:03 UTC+1, Loïc a écrit :
>
> I'm still trying to understand this issue, as it is related to my custom
> widget (does not occurs when I use the default "reference" list widget)
>
> I try to set some breakpoints for example in "accepts" method of "FORM"
> class but I can't make it work.
> If I add "dbg.set_trace()",the program breaks several lines later, in my
> application code, but never in gluon code
> If I add a breakpoint using pycharm, the program never breaks
>
> Is it because of the use of "exec in" statement at the heart of gluon?
> How can I check input / output values of gluon's methods call without
> adding "print" statements everywhere?
>
> Thanks a lot
>
>
> Le jeudi 5 décembre 2013 23:05:32 UTC+1, Massimo Di Pierro a écrit :
>>
>> I understand and I do not understand why the problem arises there but
>> your error is:
>>
>> <class 'sqlite3.IntegrityError'> foreign key constraint failed
>>
>> So I would exclude it is a problem with the foreign key contraints.
>>
>> On Thursday, 5 December 2013 09:46:59 UTC-6, Loïc wrote:
>>>
>>> I know Massimo, but my problem seems to be located in the Widget
>>> management
>>> And that's why I started my message with "
>>> *I have the same problem as the one explained here :
>>> https://groups.google.com/forum/?fromgroups#!topic/web2py/klspqXpha4E
>>> <https://groups.google.com/forum/?fromgroups#%21topic/web2py/klspqXpha4E>But
>>>
>>> as I have more specific informations, I start a new thread...*"
>>>
>>> Do you have any hints about that?
>>> Thank you
>>>
>>> Le jeudi 5 décembre 2013 16:27:55 UTC+1, Massimo Di Pierro a écrit :
>>>>
>>>> The problem is discussed here:
>>>> https://groups.google.com/forum/#!topic/web2py/klspqXpha4E
>>>>
>>>> On Thursday, 5 December 2013 05:04:17 UTC-6, Loïc wrote:
>>>>>
>>>>> Hello all-
>>>>>
>>>>> I have the same problem as the one explained here
>>>>> :https://groups.google.com/forum/?fromgroups#!topic/web2py/klspqXpha4E
>>>>> But as I have more specific informations, I start a new thread...
>>>>>
>>>>> *My Model (simplified) : *
>>>>> db.define_table('page',
>>>>> Field('parent', 'reference page', label=T('Parent')),
>>>>> Field('title', unique=True, notnull=True, label=T('Title')))
>>>>>
>>>>> db.page.parent.requires = IS_EMPTY_OR(IS_IN_DB(db, db.page.id,
>>>>> '%(title)s', zero=T('<Empty>')))
>>>>> pageSelector = HierarchicalSelect(db, db.page, db.page.title, db.page.
>>>>> rank)
>>>>> db.page.parent.widget = pageSelector.widget
>>>>>
>>>>> The goal of the HierarchicalSelect widget is to have a "tree-view" of
>>>>> all my pages. More elegant than the default selector
>>>>>
>>>>> *My Controller (simplified)*
>>>>> def edit_page():
>>>>> page = db.page(request.args(0))
>>>>> crud.settings.update_deletable = False
>>>>> form = crud.update(db.page,page,next=URL('show_page', args=page.id
>>>>> ))
>>>>> return dict(form=form)
>>>>>
>>>>> From 2.8.2 update, when I update a page, I get an error :
>>>>> <class 'sqlite3.IntegrityError'> foreign key constraint failed
>>>>>
>>>>> This error *occurs only when I update a page and select "<Empty>"
>>>>> value for the "parent" field.*
>>>>> When I *remove the two following lines of my model definition,
>>>>> everything works fine*
>>>>> pageSelector = HierarchicalSelect(db, db.page, db.page.title, db.page.
>>>>> rank)
>>>>> db.page.parent.widget = pageSelector.widget
>>>>>
>>>>>
>>>>> So the error seems to be in my HierarchicalSelect class.
>>>>> *Here is the code : *
>>>>> class HierarchicalSelect(object):
>>>>> def __init__(self, db, table_name, title_field, order_field):
>>>>> self.options=[]
>>>>> self.db = db
>>>>> self.tablename = table_name
>>>>> self.fieldname = None
>>>>> self.title = title_field
>>>>> self.order = order_field
>>>>> self.type = None
>>>>> self.rows=None
>>>>> self.hierarchyseparator = XML(" "*4)
>>>>>
>>>>> def _childs_list(self, field, depth):
>>>>> path = self.hierarchyseparator*depth
>>>>>
>>>>> path += self.hierarchyseparator
>>>>> self.options.append((field['id'], path+field[self.title]))
>>>>> [self._childs_list(child, (depth+1)) for child in self.rows.
>>>>> find(lambda row: row.parent == field.id)]
>>>>>
>>>>> def widget(self, field, value):
>>>>> self.fieldname = field.name
>>>>> self.type = field.type
>>>>> self.rows = self.db(self.tablename).select(orderby=self.order)
>>>>> self.options.append(("", T('<Empty>'))) #add root node
>>>>>
>>>>> [self._childs_list(field,0) for field in self.rows.find(lambdarow
>>>>> : row.parent < 1)]
>>>>> opt=[OPTION(name, _value=key) for key,name in self.options]
>>>>> sel = SELECT(opt,_id="%s_%s" % (self.tablename, self.fieldname
>>>>> ),
>>>>> _class="generic-widget",
>>>>> _name=self.fieldname,
>>>>> value=value)
>>>>> return sel
>>>>>
>>>>> *HTML generated with the default SELECT helper for the first option (the
>>>>> option that causes error)*
>>>>>
>>>>> <select class="generic-widget" id="page_parent" name="parent"><option
>>>>> value=""><Aucun></option>
>>>>>
>>>>>
>>>>> *HTML generated with my Widget* *for the first option (the option that
>>>>> causes error)*
>>>>> <select class="generic-widget" id="page_parent" name="parent"><option
>>>>> value=""><Aucun></option>
>>>>>
>>>>>
>>>>> The HTML seems to be the same, so I don't understand what's wrong with my
>>>>> widget...
>>>>>
>>>>>
>>>>> Can anybody help me with that?
>>>>> Thank you
>>>>>
>>>>
--
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/groups/opt_out.