Skip to content

Instantly share code, notes, and snippets.

@ambroff
Created July 8, 2011 20:56
Show Gist options
  • Save ambroff/1072801 to your computer and use it in GitHub Desktop.
Save ambroff/1072801 to your computer and use it in GitHub Desktop.
Yeah, we went there...
class PHPObjectField(models.Field):
"""Serialize the value in the same format as PHP's built in object
serializer. Yeah I know, it's fucked up. Life's a bitch."""
description = _('PHPObject')
default_error_messages = {
'invalid': _(u'This value must be serializable by PHPserialize.'),}
def get_internal_type(self):
return 'TextField'
def to_python(self, value):
if not value is None:
if not isinstance(value, basestring):
return value
else:
try:
return phpserialize.unserialize(value)
except ValueError:
pass
return {}
def get_prep_value(self, value):
try:
value = phpserialize.serialize(value)
return super(PHPObjectField, self).get_prep_value(value)
except TypeError:
raise ValidationError(self.error_messages['invalid'])
def value_to_string(self, instance):
return self.get_db_prep_value(self._get_val_from_obj(instance))
__metaclass__ = models.SubfieldBase
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment