diff options
author | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2016-09-01 13:23:12 +0200 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2016-09-01 13:23:12 +0200 |
commit | be455e8998ff8445db15476a4da1d5e3e293eab4 (patch) | |
tree | b55ad92485b3df66f5480acf785bfa550408aed0 /semantic_version | |
parent | f514edb523f01dd8a7da4c56d2ce077b30e630ab (diff) | |
download | semantic-version-be455e8998ff8445db15476a4da1d5e3e293eab4.tar.gz |
Add support for Django 1.10
Stop coercing fields magically:
>>> a = SomeModel()
>>> a.version = '0.1.0'
>>> a.version
'0.1.0'
>>> a.full_clean()
>>> a.version
Version('0.1.0')
Closes #43, #45
Diffstat (limited to 'semantic_version')
-rw-r--r-- | semantic_version/django_fields.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/semantic_version/django_fields.py b/semantic_version/django_fields.py index eba8658..c50297e 100644 --- a/semantic_version/django_fields.py +++ b/semantic_version/django_fields.py @@ -4,18 +4,32 @@ from __future__ import unicode_literals +import django from django.db import models from django.utils.translation import ugettext_lazy as _ from . import base -class BaseSemVerField(models.CharField): - __metaclass__ = models.SubfieldBase +class SemVerField(models.CharField): def __init__(self, *args, **kwargs): kwargs.setdefault('max_length', 200) - super(BaseSemVerField, self).__init__(*args, **kwargs) + super(SemVerField, self).__init__(*args, **kwargs) + + if django.VERSION[:2] < (1, 8): + def contribute_to_class(self, cls, name, **kwargs): + """Emulate SubFieldBase for Django < 1.8""" + super(SemVerField, self).contribute_to_class(cls, name, **kwargs) + from django.db.models.fields import subclassing + setattr(cls, self.name, subclassing.Creator(self)) + + def from_db_value(self, value, expression, connection, context): + """Convert from the database format. + + This should be the inverse of self.get_prep_value() + """ + return self.to_python(value) def get_prep_value(self, obj): return None if obj is None else str(obj) @@ -30,12 +44,7 @@ class BaseSemVerField(models.CharField): return str(value) def run_validators(self, value): - return super(BaseSemVerField, self).run_validators(str(value)) - - -# Py2 and Py3-compatible metaclass -SemVerField = models.SubfieldBase( - str('SemVerField'), (BaseSemVerField, models.CharField), {}) + return super(SemVerField, self).run_validators(str(value)) class VersionField(SemVerField): |