Created
May 26, 2017 12:54
-
-
Save frague59/aa5236eb11982bd810f81342da8bc05d to your computer and use it in GitHub Desktop.
forms for peoples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# noinspection PyClassHasNoInit | |
class PeopleAdminForm(dj_forms.ModelForm): | |
""" | |
Administration form for :class:`directory.models.people.People` items | |
.. note:: | |
This form us used by super-admins | |
""" | |
# noinspection PyClassHasNoInit | |
class Media: | |
""" | |
Provides some additional js js for auto detection on email and phone number | |
""" | |
js = (static('js/admin/people_admin_form.js'),) | |
class Meta: | |
#: model bound to the form | |
model = directory.models.people.People | |
#: No excluded fields | |
exclude = () | |
#: Set `phone_uid` widget to HiddenField | |
widgets = {'phone_uid': HiddenInput, | |
'comment': SummernoteWidget, | |
'additional_role': CheckboxSelectMultiple} | |
#: Overrides the :attr:`directory.admin.forms.PeopleAdminForm.hierarchy` to use a | |
#: :class:`mptt:mptt.forms.TreeNodeChoiceField` field | |
#: .. note:: The queryset if overridden on form creation, to display the hierarchies authorized for the logged user | |
hierarchy = TreeNodeChoiceField(queryset=directory.models.hierarchy.Hierarchy.objects.all(), | |
empty_label=None, label=_('Hierarchy'), required=True) | |
#: Overrides the :attr:`directory.admin.forms.PeopleAdminForm.last_name` to use a | |
#: :class:`ftk:utils.models.forms.UpperCaseCharField` field | |
last_name = UpperCaseCharField(label=_('last name'), max_length=255, required=True) | |
#: Overrides the :attr:`directory.admin.forms.PeopleAdminForm.usage_name` to use a | |
#: :class:`ftk:utils.models.forms.UpperCaseCharField` field | |
usage_name = UpperCaseCharField(label=_('usage name'), max_length=255, required=False) | |
#: Overrides the :attr:`directory.admin.forms.PeopleAdminForm.first_name` to use a | |
#: :class:`ftk:utils.models.forms.TitleCharField` field | |
first_name = TitleCharField(label=_('first name'), max_length=255, required=True) | |
class EditorPeopleAdminForm(PeopleAdminForm): | |
""" | |
Administration form for :class:`directory.models.people.People` items | |
.. note:: | |
This form us used by super-admins | |
""" | |
class Meta: | |
exclude = ('image', ) | |
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, | |
initial=None, error_class=ErrorList, label_suffix=None, | |
empty_permitted=False, instance=None): | |
super(EditorPeopleAdminForm, self).__init__(data=data, files=files, auto_id=auto_id, prefix=prefix, | |
initial=initial, error_class=error_class, label_suffix=label_suffix, | |
empty_permitted=empty_permitted, instance=instance) | |
if 'image' in self.fields: | |
self.fields['image'].widget.attrs['readonly'] = True | |
logger.debug('EditorPeopleAdminForm::__init__() `image` updated') | |
if 'idcard_guid' in self.fields: | |
self.fields['idcard_guid'].widget.attrs['readonly'] = True | |
logger.debug('EditorPeopleAdminForm::__init__() `idcard_guid` updated') | |
if 'idcard_date' in self.fields: | |
self.fields['idcard_date'].widget.attrs['readonly'] = True | |
logger.debug('EditorPeopleAdminForm::__init__() `idcard_date` updated') | |
def clean(self): | |
""" | |
Overrides the :method:`django:django.forms.ModelForm.clean` method to check on creation if the people | |
is unique in the database | |
:returns: cleaned data | |
""" | |
cleaned_data = super(PeopleAdminForm, self).clean() | |
civility = cleaned_data.get('civility') | |
last_name = cleaned_data.get('last_name') | |
first_name = cleaned_data.get('first_name') | |
if directory.models.people.People.objects.filter(civility=civility, | |
last_name=last_name, | |
first_name=first_name).exclude(pk=self.instance.id).count() > 0: | |
msg = _('People MUST be unique in the directory.') | |
self.add_error('civility', msg) | |
self.add_error('last_name', msg) | |
self.add_error('first_name', msg) | |
raise dj_forms.ValidationError(_('A user with civility %(civility)s, ' | |
'last name %(last_name)s and first name %(first_name)s ' | |
'already exists in the directory.')) | |
return cleaned_data |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment