Changeset 372

Show
Ignore:
Timestamp:
05/23/08 14:25:52 (6 months ago)
Author:
johnbywater
Message:

Fixed manipulator to convert request datato domain model values before setting domain object attributes, persistent linked lists were interacting when loaded from migration data.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/view/manipulator.py

    r368 r372  
    364364 
    365365    def setNonAssociateListAttributes(self): 
     366        self.setAttributesFromMultiValueDict(self.domainObject, self.data) 
     367        self.domainObject.save() 
     368        
     369    def setAttributesFromMultiValueDict(self, domainObject, multiValueDict): 
     370        attrValues = {} 
     371        metaAttrs = {} 
    366372        for metaAttr in self.metaObject.attributes: 
    367373            if not metaAttr.isAssociateList: 
    368374                if metaAttr.name in self.fieldNames: 
    369                     metaAttr.setAttributeFromMultiValueDict( 
    370                         self.domainObject, self.data 
    371                     ) 
    372         self.domainObject.save() 
    373          
     375                    if metaAttr.name in self.data: 
     376                        metaAttrs[metaAttr.name] = metaAttr 
     377        for attrName in metaAttrs: 
     378            metaAttr = metaAttrs[attrName] 
     379            try: 
     380                domValue = metaAttr.makeValueFromMultiValueDict(multiValueDict) 
     381                attrValues[attrName] = domValue 
     382            except Exception, inst: 
     383                msg = "Can't make '%s' value from multi-value dict: %s" % ( 
     384                    attrName, multiValueDict 
     385                ) 
     386                self.logger.error(msg) 
     387                raise 
     388        for attrName in metaAttrs: 
     389            metaAttr = metaAttrs[attrName] 
     390            attrValue = attrValues[attrName] 
     391            if attrValue != metaAttr.getAttributeValue(domainObject): 
     392                msg = "Setting '%s' attribute to '%s'." % (attrName, attrValue) 
     393                self.logger.debug(msg) 
     394                metaAttr.setAttributeValue(domainObject, attrValue) 
     395 
    374396    def setAssociateListAttributes(self): 
    375397        for metaAttr in self.metaObject.attributes: