20120903¶
lino.ui.extjs3.ext_store
: added DisabledFieldsStoreField.disabled_fields because GenericForeignKey has no attribute editable.Account
: The new ref field now is blank=True but not null=True. If not specified, a default value is being set in full_clean.lino.modlib.outbox
: added new menu commandrenamed lino.core.table to lino.core.dbtables, renamed lino.utils.tables to lino.core.tables
A subtile side effect occurs when lino_welfare tried to generate docs. Here is a snippet that reproduces it:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'lino_welfare.settings'
from lino_welfare.modlib.pcsw import models as pcsw
It causes the following traceback:
Traceback (most recent call last):
File "0903.py", line 3, in <module>
from lino_welfare.modlib.pcsw import models as pcsw
File "t:\hgwork\welfare\lino_welfare\modlib\pcsw\models.py", line 1344, in <module>
class UsersWithClients(dd.VirtualTable):
File "t:\hgwork\lino\lino\core\actors.py", line 145, in __new__
cls.add_virtual_field(k,v)
File "t:\hgwork\lino\lino\core\actors.py", line 815, in add_virtual_field
vf.lino_resolve_type(cls,name)
File "t:\hgwork\lino\lino\core\fields.py", line 233, in lino_resolve_type
self.return_type = resolve_field(self.return_type)
File "t:\hgwork\lino\lino\core\modeltools.py", line 404, in resolve_field
model = models.get_model(app_label,l[0])
File "l:\snapshots\django\django\db\models\loading.py", line 213, in get_model
self._populate()
File "l:\snapshots\django\django\db\models\loading.py", line 67, in _populate
self.load_app(app_name)
File "l:\snapshots\django\django\db\models\loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "l:\snapshots\django\django\utils\importlib.py", line 35, in import_module
__import__(name)
File "t:\hgwork\welfare\lino_welfare\modlib\jobs\models.py", line 88, in <module>
from lino_welfare.modlib.pcsw import models as pcsw
ImportError: cannot import name models
The reason was that lino_resolve_type of virtual fields on actors was being called too early during the startup process. Here it triggered a premature call to _populate() Django’s model cache.
Accessing virtual fields¶
While working on the template for printing a sales invoice,
I stumbled over a missing feature which I described as follows
in the MTI tutorial (lino.test_apps.mti
):
lino.fields.VirtualField
instances are no Django fields, Django ignores them and so doesn’t install the simple attribute instance get/set access for them. That’s why the followingobj.is_restaurant
does not giveFalse
as you might expect.obj.is_restaurant <lino.utils.mti.EnableChild object at …>
This is not implemented because the only need for it would be to make the following examples more elegant…
Added the following simple __get__ and __set__ methods to
lino.core.fields.VirtualField
:
def __get__(self,instance,owner):
if instance is None: return self
return self.value_from_object(instance)
def __set__(self,instance,value):
return self.set_value_in_object(None,instance,value)
Which turns virtual fields into descriptors.
So the above section from the MTI tutorial is no longer necessary because the feature is no longer missing.
Lino-Welfare¶
added Account.ref to debts std fixtures
Researched on a mysterious message “outbox.Attachment Controllers of Attachment must define a method get_target_url. (1 object(s) with primary key 1)” during data migration.