I try 'list:reference table' and it doesn't work at all ! (even
DB-admin!) (2.12.1-stable+timestamp.2015.08.07.07.22.06 (Running on
Rocket 1.2.6, Python 2.7.9)) - run from source on Win7x32
I got:
<type 'exceptions.TypeError'> isinstance() arg 2 must be a class, type, or
tuple of classes and typesCode listing
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
if not value:
return None
from ..adapters import GoogleDatastoreAdapter
refs = None
db, id = self.ref._db, self.ref._id
if isinstance(db._adapter, GoogleDatastoreAdapter):
def count(values):
return db(id.belongs(values)).select(id)
rx = range(0, len(value), 30)
refs = reduce(lambda a, b: a & b, [count(value[i:i+30])
I think it's a little bug, because there is *conditional import*
GoogleDatastoreAdapter (only if gae) in the __init__.py of adapters
package. Otherwise GoogleDatastoreAdapter = None!
.../adapters/__init__.py:
...
#: load google adapters if needed
if gae is not None:
from .google_adapters import GoogleDatastoreAdapter, GoogleSQLAdapter
# discouraged, for backward compatibility
ADAPTERS['gae'] = GoogleDatastoreAdapter
# add gae adapters
ADAPTERS['google:datastore'] = GoogleDatastoreAdapter
ADAPTERS['google:datastore+ndb'] = GoogleDatastoreAdapter
ADAPTERS['google:sql'] = GoogleSQLAdapter
else:
#: make the import available for BaseAdapter
GoogleDatastoreAdapter = None
#: make the import available for BaseAdapter - I don't find such import in
base.py
Probably must be:
if GoogleDatastoreAdapter and isinstance(db._adapter,
GoogleDatastoreAdapter):
I've corrected it and try - it works but row.render whatever doesn't:
<type 'exceptions.AttributeError'> 'long' object has no attribute 'id'
it's another small bug in *\helpers\methods.py* (class *_repr_ref_list*)
:
else:
refs = db(id.belongs(value)).select(id)
return refs and ', '.join(
_fieldformat(self.ref, x.id) for x in value) or ''
must be just x (not x.id):
else:
refs = db(id.belongs(value)).select(id)
return refs and ', '.join(
_fieldformat(self.ref, x) for x in value) or ''
I've tried it - works
On Thursday, August 13, 2015 at 6:44:45 AM UTC+3, Michael Beller wrote:
>
> The error occurs when I use the render() function, e.g., teachers = db(
> db.teacher.id>0).select().render(0)
>
> The render() function works fine without the list:reference fields but
> fails with the list:reference fields.
>
> On Wednesday, August 12, 2015 at 11:23:44 PM UTC-4, Massimo Di Pierro
> wrote:
>>
>> It is only when printed in CSV that it represents with the |. It is all
>> fine:
>>
>> In [1]: db.define_table(
>>
>> ...: 'school',
>>
>> ...: Field('Name'),
>>
>> ...: format='%(Name)s',
>>
>> ...: migrate=True
>>
>> ...: )
>>
>> Out[1]: <Table school (id,Name)>
>>
>>
>> In [2]:
>>
>>
>> In [2]: db.define_table(
>>
>> ...: 'teacher',
>>
>> ...: Field('Name'),
>>
>> ...: Field('schools', 'list:reference school', label='School
>> Villages'),
>>
>> ...: format='%(Name)s',
>>
>> ...: migrate=True
>>
>> ...: )
>>
>> Out[2]: <Table teacher (id,Name,schools)>
>>
>>
>> In [3]:
>>
>>
>> In [3]: db.school.insert(Name="a")
>>
>> Out[3]: 1L
>>
>>
>> In [4]: db.school.insert(Name="b")
>>
>> Out[4]: 2L
>>
>>
>> In [5]: db.school.insert(Name="c")
>>
>> Out[5]: 3L
>>
>>
>> In [6]: db.teacher.insert(Name="xxx", schools=[1,2,3])
>>
>> Out[6]: 1L
>>
>>
>> In [7]: teachers = db(db.teacher.id>0).select()
>>
>>
>> In [8]: print teachers
>>
>> teacher.id,teacher.Name,teacher.schools
>>
>> 1,xxx,|1|2|3|
>>
>>
>>
>> In [9]: print teachers[0].schools
>>
>> [1L, 2L, 3L]
>>
>> On Wednesday, 12 August 2015 07:55:50 UTC-5, Michael Beller wrote:
>>>
>>> db.define_table(
>>> 'school',
>>> Field('Name'),
>>> format='%(Name)s',
>>> migrate=True
>>> )
>>>
>>> db.define_table(
>>> 'teacher',
>>> Field('Name'),
>>> Field('schools', 'list:reference school', label='School
>>> Villages'),
>>> format='%(Name)s',
>>> migrate=True
>>> )
>>>
>>> teachers = db(db.teacher.id>0).select().render(0)
>>>
>>> Without the render(), it a Row with the piped school id's, e.g.,
>>> 51,sally,|53|52|
>>>
>>> On Wednesday, August 12, 2015 at 1:50:20 AM UTC-4, Massimo Di Pierro
>>> wrote:
>>>>
>>>> Can you show us minimalist code to reproduce the problem?
>>>>
>>>> On Tuesday, 11 August 2015 23:03:24 UTC-5, Michael Beller wrote:
>>>>>
>>>>> I was using web2py 2.10.4 and encountered the error using
>>>>> list:reference:
>>>>> <type 'exceptions.TypeError'> isinstance() arg 2 must be a class,
>>>>> type, or tuple of classes and types
>>>>>
>>>>> I then upgraded to 2.12.2 and applied this fix
>>>>> <https://github.com/web2py/pydal/commit/2172b776b9c41884717902e68900b41c105e0364#diff-114ce07f361177e0669ec9a374ef7d6a>
>>>>>
>>>>> that others referenced in the forums having the same problem.
>>>>>
>>>>> Now I'm getting this error:
>>>>> <type 'exceptions.AttributeError'> 'long' object has no attribute 'id'
>>>>>
>>>>> The error occurs in the render() function when applied to a query.
>>>>>
>>>>> File
>>>>> "/Users/MichaelBeller/Dev/w2p-enriched/gluon/packages/dal/pydal/helpers/methods.py",
>>>>> line 279, in __call__
>>>>> _fieldformat(self.ref, x.id) for x in value) or ''
>>>>> File
>>>>> "/Users/MichaelBeller/Dev/w2p-enriched/gluon/packages/dal/pydal/helpers/methods.py",
>>>>> line 279, in <genexpr>
>>>>> _fieldformat(self.ref, x.id) for x in value) or ''
>>>>> AttributeError: 'long' object has no attribute 'id'
>>>>>
>>>>> Does anybody else have this problem?
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
--
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.