From: Martin d'A. <Mar...@s2...> - 2004-12-03 00:51:59
|
> > selectResults = self._connection._SO_selectOne(self, dbNames) > > > > and fill in the selectResults tuple from within the SQLObject.self (with > > getattr(self,dbName)) and still call self._SO_selectInit(selectResults) > > > > Is one solution preferable over the other? Should I set self.dirty = True? > > It seems to me the best way to preserve SQLObject behavior without > introducing a new toggle ( as I previously suggested ) would be to (as > you suggest) fill out selectResults without issuing a select to > the database. I don't know how to do it without a new toggle. I have something here but is it not working yet. Admire a modified section of main.py: if not selectResults: if (self._fetchValuesOnCreate): dbNames = [col.dbName for col in self._SO_columns] selectResults = self._connection._SO_selectOne(self, dbNames) else: names = [col.name for col in self._SO_columns] tmp_selectResults = [] for name in names: tmp_selectResults.append(getattr(self,name)) selectResults = tuple(tmp_selectResults) if not selectResults: raise SQLObjectNotFound, "The object %s by the ID %s does not exist" % (self.__class__.__name__, self.id) self._SO_selectInit(selectResults) self._SO_createValues = {} self.dirty = False The problem is with "tmp_selectResults.append(getattr(self,name))". self is some sort of object that overloads getattr to go to the database to get the attribute value!!! Martin |