class CConfig(models.Model):
name = models.CharField(max_length=128)
valuetype = models.CharField(max_length=128)
def __unicode__(self):
return u'%s' % self.name
class Meta:
db_table = 'config_client'
get_latest_by = 'id'
ordering = ['name']
class Client(models.Model):
login = models.CharField(max_length=64)
password = models.CharField(max_length=16)
email = models.CharField(max_length=128)
# firstname, surname etc. is stored in CConfig, this is designed for i8n purposes
def __unicode__(self):
return u'%s' % self.login
def __getattr__( self, name ):
# this method is called when the attribute for this class doesn't exist
# access the shop config class!
try:
__cfg = CConfig.objects.get( name=name )
__attr = self.clientconfig_set.get( config=__cfg )
except:
raise AttributeError
else:
return u'%s' % __attr.value
raise AttributeError
def setVar( self, name, value ):
cfg = CConfig.objects.get( name=name )
try:
attr = self.clientconfig_set.get( config=cfg )
except:
attr = ClientConfig( config=cfg, client=self )
attr.save()
attr.value = value
attr.save()
def __setattr__( self, name, value ):
# this method is called when the attribute for this class doesn't exist
# access the shop config class!
try:
# if not found, find or create
__cfg = CConfig.objects.get( name=name )
except:
# try to find attribute in normal object dict
# setattr( self, name, value )
self.__dict__[ name ] = value # this is old style 2.4
else:
self.setVar( name, value )
class ClientConfig(models.Model):
client = models.ForeignKey(Client)
config = models.ForeignKey(CConfig)
value = models.CharField(max_length=128)
def __unicode__(self):
return u'%s - %s - %s' % ( self.client, self.config, self.value )
class Meta:
db_table = 'client_config'
get_latest_by = 'id'
ordering = ['client']
if __name__ == '__main__':
my_client = Client(email='mymail@example.com', login='me', password='me'
my_client.save() # save first
my_client.longname = 'Beaver'
my_client.species = 'Chicken'
my_client.save()
# the .species and .longname must exist in the CConfig!
Comments