On Friday, June 7, 2019 at 8:43:43 AM UTC-7, David Manns wrote:
>
> It turns out the orderby is redundant.
>
> Field('Account', 'reference CoA', requires=IS_IN_DB(db, 'CoA.id',
> '%(Name)s')),
>
> works the same. In the application smartgrid edit form the Account field
> is a dropdown displaying the Name's of the accounts in alphabetic order, no
> need for the orderby, so yes, the user is selecting by Name but of course
> what's stored in Account is the corresponding id.
>
> The orderby in Event is not redundant, as the event names need to be in
> reverse chronological order in the dropdown, rather than alphabetic.
>
> But appadmin still fails exactly the same way. Looks like a bug in
> appadmin to me.
>
The place where I use Appadmin and a reference field is at home, and last
night I was paying for the night before, and didn't even wake my computer.
But in my experience (admittedly with 2.14.6) Appadmin shows the child
table just fine, with a column for the ids from the parent table.
/dps
> On Thursday, June 6, 2019 at 12:17:53 PM UTC-4, Ben Duncan wrote:
>>
>> Field('Account', 'reference CoA',
>> requires=IS_IN_DB(db, 'CoA.id', '%(Name)s', orderby=
>> db.CoA.Name)),
>>
>> To me, it looks like you are using "name" to reference the COA, instead
>> of the ID.
>>
>> http://www.web2py.com/books/default/search/29?search=IS_IN_DB
>>
>> *Ben Duncan*
>> DBA / Chief Software Architect
>> Mississippi State Supreme Court
>> Electronic Filing Division
>>
>>
>> On Thu, Jun 6, 2019 at 10:25 AM David Manns <[email protected]> wrote:
>>
>>> running Python 2.7, web2py 2.18.5
>>>
>>> table:
>>>
>>> db.define_table('AccTrans',
>>> Field('Timestamp', 'datetime', default=request.now, writable=False),
>>> Field('Bank', 'reference Bank_Accounts', writable=False), #e.g.
>>> PayPal, Cambridge Trust, ...
>>> Field('Account', 'reference CoA',
>>> requires=IS_IN_DB(db, 'CoA.id', '%(Name)s', orderby=
>>> db.CoA.Name)),
>>> Field('Event', 'reference Events',
>>> requires=IS_EMPTY_OR(IS_IN_DB(db, 'Events.id',
>>> '%(Event)s', orderby=~db.Events.Date)),
>>> comment='leave blank if not applicable'),
>>> Field('Amount', 'decimal(8,2)',
>>> comment='enter full amount of check (negative) or
>>> deposit (positive); split using Edit if multiple accounts',
>>> requires=IS_DECIMAL_IN_RANGE(-10000, 10000)), # >=0
>>> for asset/revenue, <0 for liability/expense
>>> Field('Fee', 'decimal(6,2)',
>>> requires=IS_EMPTY_OR(IS_DECIMAL_IN_RANGE(-1000,100))), # e.g. PayPal
>>> transaction fee, <0 (unless refunded)
>>> Field('CheckNumber', 'integer', default=None,
>>> requires=IS_EMPTY_OR(IS_INT_IN_RANGE(1,99999)),
>>> comment='enter check number if recording a check
>>> written'),
>>> Field('Accrual', 'boolean', default=True, readable=True,
>>> writable=False),
>>> Field('FullAmt', 'decimal(8,2)', writable=False, readable=False),
>>> # for an accrual, the original unsplit amount
>>> Field('Reference', 'string', writable=False),
>>> Field('Notes', 'text'),
>>> singular='Transaction', plural='Check_Register')
>>>
>>> first referenced table:
>>>
>>> db.define_table('CoA',
>>> Field('Name', 'string'),
>>> Field('Notes', 'string'),
>>> singular='Bank', plural='Banks', format='%(Name)s')
>>> db.CoA.Name.requires = [IS_NOT_EMPTY(), IS_NOT_IN_DB(db, 'CoA.Name')]
>>>
>>> appadmin displays table rows just fine.
>>>
>>> clicking a record link in the id column to edit the record fails:
>>>
>>> Ticket ID
>>>
>>> 127.0.0.1.2019-06-06.11-23-25.64b3e296-56e8-4c9f-a875-5a0ae496f620
>>> <type 'exceptions.KeyError'> 'Account.Name' Version
>>> web2py™ Version 2.18.5-stable+timestamp.2019.04.08.04.22.03
>>> Python Python 2.7.14: C:\Python27\python.exe (prefix: C:\Python27)
>>> Traceback
>>>
>>> 1.
>>> 2.
>>> 3.
>>> 4.
>>> 5.
>>> 6.
>>> 7.
>>> 8.
>>> 9.
>>> 10.
>>> 11.
>>> 12.
>>> 13.
>>> 14.
>>> 15.
>>> 16.
>>> 17.
>>> 18.
>>> 19.
>>> 20.
>>> 21.
>>> 22.
>>>
>>> Traceback (most recent call last):
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\restricted.py", line 219, in restricted
>>> exec(ccode, environment)
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\applications\init\controllers/appadmin.py", line 695,
>>> in <module>
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\globals.py", line 421, in <lambda>
>>> self._caller = lambda f: f()
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\applications\init\controllers/appadmin.py", line 337,
>>> in update
>>> f='download', args=request.args[:1]))
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\sqlhtml.py", line 1550, in __init__
>>> inp = self.widgets.options.widget(field, default)
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\sqlhtml.py", line 353, in widget
>>> options = requires[0].options()
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py", line 2742,
>>> in _options
>>> options = self.other.options(*args, **kwargs)
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py", line 609, in
>>> options
>>> self.build_set()
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py", line 604, in
>>> build_set
>>> self.labels = [self.label % r for r in records]
>>> File "C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\objects.py", line 103, in
>>> __getitem__
>>> raise KeyError(key)
>>> KeyError: 'Account.Name'
>>>
>>> Error snapshot [image: help]
>>> <http://127.0.0.1:8000/admin/default/ticket/init/127.0.0.1.2019-06-06.11-23-25.64b3e296-56e8-4c9f-a875-5a0ae496f620#>
>>>
>>>
>>> <type 'exceptions.KeyError'>('Account.Name')
>>>
>>> inspect attributes
>>> Frames
>>>
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\restricted.py in restricted at line 219*
>>> code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\applications\init\controllers\appadmin.py in
>>> <module>
>>> at line 695* code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\globals.py in <lambda> at line 421* code
>>> arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\applications\init\controllers\appadmin.py in
>>> update
>>> at line 337* code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\sqlhtml.py in __init__ at line 1550* code
>>> arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\sqlhtml.py in widget at line 353* code
>>> arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py in _options
>>> at
>>> line 2742* code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py in options
>>> at
>>> line 609* code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\validators.py in
>>> build_set
>>> at line 604* code arguments variables
>>> -
>>>
>>> *File C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\gluon\packages\dal\pydal\objects.py in __getitem__
>>> at
>>> line 103* code arguments variables
>>> Function argument list
>>>
>>> (self=<Row {'Accrued': -946.32, 'id': 1L}>, k='Account.Name')
>>> Code listing
>>>
>>> 98.
>>> 99.
>>> 100.
>>> 101.
>>> 102.
>>> 103.
>>> 104.
>>> 105.
>>> 106.
>>> 107.
>>>
>>> lg = BasicStorage.get(self, '__get_lazy_reference__', None)
>>> if callable(lg):
>>> v = self[key] = lg(key)
>>> return v
>>>
>>> raise KeyError(key)
>>>
>>> __str__ = __repr__ = lambda self: '<Row %s>' % \
>>> self.as_dict(custom_types=[LazySet])
>>>
>>> Variables
>>> key 'Account.Name'
>>> builtinKeyError <type 'exceptions.KeyError'>
>>>
>>> Context
>>>
>>> locals request session response
>>> In file: C:\Users\David\Google Drive\My
>>> Documents\OxCamNE.3.1\applications\init\controllers/appadmin.py
>>>
>>> 1.
>>>
>>> <code object <module> at 000000000BC220B0, file "C:\Users\David\Google
>>> Drive\My Documents\OxCamNE.3.1\applications\init\controllers/appadmin.py",
>>> line 7>
>>>
>>> --
>>> 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].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/web2py/bfd3002d-300b-49a5-9078-e229cafb9e3f%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/web2py/bfd3002d-300b-49a5-9078-e229cafb9e3f%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
--
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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/3a1a3b25-0b8b-44db-b110-770737afc01e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.