django-modeltranslation/modeltranslation/forms.py
2021-09-18 10:55:39 +03:00

49 lines
1.5 KiB
Python

# -*- coding: utf-8 -*-
from django import forms
from django.core import validators
from modeltranslation.fields import TranslationField
class TranslationModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(TranslationModelForm, self).__init__(*args, **kwargs)
for f in self._meta.model._meta.fields:
if f.name in self.fields and isinstance(f, TranslationField):
del self.fields[f.name]
class NullCharField(forms.CharField):
"""
CharField subclass that returns ``None`` when ``CharField`` would return empty string.
"""
def to_python(self, value):
if value in validators.EMPTY_VALUES:
return None
return super(NullCharField, self).to_python(value)
class NullableField(forms.Field):
"""
Form field mixin that ensures that ``None`` is not cast to anything (like
the empty string with ``CharField`` and its derivatives).
"""
def to_python(self, value):
if value is None:
return value
return super(NullableField, self).to_python(value)
# Django 1.6
def _has_changed(self, initial, data):
return self.has_changed(initial, data)
def has_changed(self, initial, data):
if (initial is None and data is not None) or (initial is not None and data is None):
return True
obj = super(NullableField, self)
if hasattr(obj, 'has_changed'):
return obj.has_changed(initial, data)
else: # Django < 1.9 compat
return obj._has_changed(initial, data)