Bug #928
Resolving relations to VersionedRecord classes happens on Primary Key only
Description
Currently, foreign relations to the VersionedRecord
class are resolved using the FromPrimary
method. This means that a specific (possibly outdated) version of the appropriate record is returned. In most situations, the reference is actually to the record in general, and not to a specific version of that record.
That is to say, the default loading method for VersionedRecord
classes should be FromIdentifier
.
Ideally, the specific method used for loading should be specified by the designer of the various relations, as there exist various situations where the specific version needs linking instead.
Associated revisions
Revision 290:e811dcd32282
(diff)
Retrieving a foreign relation that is a VersionedRecord now automatically (by default) uses FromIdentifier. This behaviour can be changed by either defining the _LOAD_METHOD class variable, which changes the global load behaviour, or by provinding a dictionary to the _FOREIGN_RELATIONS mapping, where the class name is a dictionary with 'class' and 'loader' keys. The latter being a string naming the loader method for foreign relations. This resolves #928.
History
#1 Updated by Elmer de Looff about 12 years ago
- Status changed from New to Resolved
- % Done changed from 0 to 70
Applied in changeset e811dcd32282.
#2 Updated by Elmer de Looff about 12 years ago
- Status changed from Resolved to Closed
- % Done changed from 70 to 100
VersionedRecord now retrieves requested foreign related records using FromIdentifier
. This behaviour can be adjusted both on a per-class level, and a per-relation level:
Changing the load method for the entire class:
from uweb import model
class Customer(model.VersionedRecord):
"""Versioned customer class that is loaded as specific version by default"""
_LOAD_METHOD = 'FromPrimary'
Changing the load method for a single relation:
from uweb import model
class Customer(model.VersionedRecord):
"""Versioned customer class"""
class Invoice(model.Record):
"""Invoice class, related customers are of a fixed version"""
_FOREIGN_RELATIONS = {'customer': {'class': Customer, 'loader': 'FromPrimary'}}
Added (failing) test for uWeb model to confirm issue #928.