> I forgot this was changed -- now AttributeError exceptions in the virtual 
> fields function fail silently, simply foregoing the creation of the virtual 
> field value for the record (which is why you got no error but didn't see 
> the value in the record).
>

Gotcha, thanks!
 

>  
>
>>  Instead, it should be:
>>  
>>
>>> db.myorder.c = Field.Virtual('c', lambda row: row.myorder.a * row.
>>> myorder.b)
>>>
>>> In the function, you must include the table name when accessing fields 
>>> in the row. Also, note that even when creating the virtual field via 
>>> assignment, you should still specify the name of the virtual field within 
>>> Field.Virtual() -- otherwise the "name" attribute of the virtual field will 
>>> be set to "unknown", which may cause problems in some contexts.
>>>
>>
>> Thanks for the enlightenment. I've tried your change, and now it gives me 
>> the proper result. But i don't get your remark about the name attribute. I 
>> can't find that in the book for new style virtual classes, can you offer me 
>> a pointer? When looking at ">>> db.item.total_price = 
>> Field.Virtual(lambda row: row.unit_price*row.quantity)" from the book 
>> (mind the table name not being used here either) i thought the name 
>> assignment would be automatic by using db.myorder.c 
>>
>
> Note, the book code is actually:
>
> db.item.total_price = Field.Virtual(
>     'total_price',
>     lambda row: row.item.unit_price*row.item.quantity)
>
>
>
Depends on where you look in the 
book: 
http://www.web2py.com/books/default/chapter/35/06/the-database-abstraction-layer
 
 - i just copied that line yesterday. Because of the different i googled 
'virtual fields web2py' and found both old and new documentation in the 
book. 
 

> Notice the first argument to Field.Virtual is 'total_price'. If you do 
> that, then db.item.total_price.name will be 'total_price'. If you don't 
> do that, then db.item.total_price.name will be 'unknown', which will 
> cause problems in some cases where the field's "name" attribute is used. 
> This is not explicitly mentioned in the book, though the book examples do 
> include the name explicitly.
>

All clear when looking at the right page, thanks. 
 

> Virtual fields are not stored in the database but are calculated after 
>> records are pulled from the database, so they are not to be listed in the 
>> call to .select().
>>
>
> Can a notimplemented exception be justified in such a case?
>>
>
> I think that particular exception is for methods within classes that have 
> not been implemented. In any case, I don't think this case justifies a new 
> custom exception. Should probably just be handled with documentation.
>

True, maybe a lookuperror might suite better, but then docs are a much 
better solution anyway. 

Remco 

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to