summaryrefslogtreecommitdiff
path: root/semantic_version
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polyconseil.fr>2016-09-01 13:23:12 +0200
committerRaphaël Barrois <raphael.barrois@polyconseil.fr>2016-09-01 13:23:12 +0200
commitbe455e8998ff8445db15476a4da1d5e3e293eab4 (patch)
treeb55ad92485b3df66f5480acf785bfa550408aed0 /semantic_version
parentf514edb523f01dd8a7da4c56d2ce077b30e630ab (diff)
downloadsemantic-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.py27
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):