diff options
author | Valérie-Emma Leroux <emma@iggdrasil.net> | 2017-04-07 11:40:31 +0200 |
---|---|---|
committer | Valérie-Emma Leroux <emma@iggdrasil.net> | 2017-04-07 11:40:31 +0200 |
commit | 7f22d3c20cc24debfe123425efa63ec5293e4b4c (patch) | |
tree | f773b80964981c231c892ee5255b94285bc5620a /ishtar_common/forms.py | |
parent | 9127307734c85b816ac7dbb539b565ffb106d60f (diff) | |
parent | da4af2ab5d105f6d2ce442b517e532b7570616e3 (diff) | |
download | Ishtar-7f22d3c20cc24debfe123425efa63ec5293e4b4c.tar.bz2 Ishtar-7f22d3c20cc24debfe123425efa63ec5293e4b4c.zip |
Merge branch 'master' of git.iggdrasil.net:/srv/git/ishtar
Conflicts:
archaeological_operations/templates/ishtar/sheet_operation.html
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r-- | ishtar_common/forms.py | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 42d74f9ef..ecae18c5e 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -22,6 +22,7 @@ Forms definition """ import datetime import re +import types from django import forms from django.core.urlresolvers import reverse @@ -94,7 +95,32 @@ class FinalDeleteForm(FinalForm): confirm_end_msg = _(u"Are you sure you want to delete?") +def get_readonly_clean(key): + def func(self): + instance = getattr(self, 'instance', None) + if instance and getattr(instance, key): + return getattr(instance, key) + else: + return self.cleaned_data[key] + return func + + class FormSet(BaseFormSet): + def __init__(self, *args, **kwargs): + self.readonly = False + if 'readonly' in kwargs: + self.readonly = kwargs.pop('readonly') + self.can_delete = False + # no extra fields + if 'data' in kwargs: + prefix = "" + if "prefix" in kwargs: + prefix = kwargs['prefix'] + if prefix + '-INITIAL_FORMS' in kwargs['data']: + kwargs['data'][prefix + '-TOTAL_FORMS'] = \ + kwargs["data"][prefix + '-INITIAL_FORMS'] + super(FormSet, self).__init__(*args, **kwargs) + def check_duplicate(self, key_names, error_msg=""): """Check for duplicate items in the formset""" if any(self.errors): @@ -117,8 +143,17 @@ class FormSet(BaseFormSet): def add_fields(self, form, index): super(FormSet, self).add_fields(form, index) - form.fields[DELETION_FIELD_NAME].label = '' - form.fields[DELETION_FIELD_NAME].widget = widgets.DeleteWidget() + if self.readonly: + for k in form.fields: + # django 1.9: use disabled + form.fields[k].widget.attrs['readonly'] = True + clean = get_readonly_clean(k) + clean.__name__ = 'clean_' + k + clean.__doc__ = 'autogenerated: clean_' + k + setattr(form, clean.__name__, types.MethodType(clean, form)) + if self.can_delete: + form.fields[DELETION_FIELD_NAME].label = '' + form.fields[DELETION_FIELD_NAME].widget = widgets.DeleteWidget() class TableSelect(forms.Form): |