On Wed, Sep 16, 2009 at 05:32:06PM +0200, Frank Wagner wrote:
> database didn't have a charset declared at creation time
> (although it is de facto in iso-8859-1).
> so this was just the first working way that i could figure out.
> i guess the UnicodeCol doesn't do it in a very different way?
> > NAME = UnicodeCol(length=40, dbName="NAME", dbEncoding='iso-8859-1')
It uses a different implementation internally based on
validators/converters, but UnicodeValidator does exactly that - converts
strings from DB to unicode, and converts unicode to strings for DB. See
BTW, speaking about validators...
> def _get_NAME(self):
> return self._SO_get_NAME() and unicode(self._SO_get_NAME(),
> 'iso-8859-1').strip() or u''
UnicodeCol only converts strings from/to unicode, so if you need
to strip and replace None's with u'' you have to do it yourself, but the
way to it, especially for many columns, is to create your own
from col import validators
def to_python(self, value, state):
if value is None:
return None # or u'' if you really want it
if isinstance(value, basestring):
raise validators.Invalid("expected a str or unicode in column '%s', got %s %r instead" % \
(self.name, type(value), value), value, state)
And now you can use it in as many columns as you want:
NAME = UnicodeCol(length=40, dbName="NAME", dbEncoding='iso-8859-1',
SURNAME = UnicodeCol(length=40, dbName="SURNAME", dbEncoding='iso-8859-1',
SQLObject stacks validators so your validator will be used along with
UnicodeValidator in UnicodeCol, not instead of it.
Oleg Broytmann http://phd.pp.ru/ phd@...
Programmers don't die, they just GOSUB without RETURN.