Source code for pytoolbox.django.models.fields.mixins

"""
Mix-ins for building your own models fields.
"""

from pytoolbox.django.core import validators

__all__ = ['LowerCaseMixin', 'OptionsMixin', 'StripMixin']


[docs]class LowerCaseMixin(object):
[docs] def get_prep_value(self, value): value = super().get_prep_value(value) if value is not None: value = value.lower() return value
class NullifyMixin(object): """Replace falsy values by None if NULL is allowed.""" def pre_save(self, model_instance, add): value = super().pre_save(model_instance, add) if not value and self.null: value = None setattr(model_instance, self.attname, value) return value
[docs]class OptionsMixin(object): default_options = {} override_options = {}
[docs] def __init__(self, **kwargs): super().__init__(**{**self.default_options, **kwargs, **self.override_options})
[docs]class StripMixin(object): """https://code.djangoproject.com/ticket/6362#no1""" default_validators = [validators.EmptyValidator()]
[docs] def pre_save(self, model_instance, add): value = super().pre_save(model_instance, add) if value: value = value.strip() setattr(model_instance, self.attname, value) return value