diff options
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r-- | ishtar_common/forms.py | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index c36c9b07d..13586e203 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -645,6 +645,7 @@ class ManageOldType(IshtarForm): class QAForm(CustomForm, ManageOldType): MULTI = False SINGLE_FIELDS = [] + REPLACE_FIELDS = [] def __init__(self, *args, **kwargs): self.items = kwargs.pop('items') @@ -667,18 +668,37 @@ class QAForm(CustomForm, ManageOldType): and k in kwargs['data'] and kwargs['data'][k]: self.fields[k].rendered_value = dict( self.fields[k].choices)[int(kwargs['data'][k])] - if self.MULTI and k not in self.REPLACE_FIELDS: + if k not in self.REPLACE_FIELDS: self.fields[k].label = unicode(self.fields[k].label) + \ unicode(u" - append to existing") else: self.fields[k].label = unicode(self.fields[k].label) + \ unicode(u" - replace") - def save(self, items): + def save(self, items, user): for item in items: - for key in self.cleaned_data: - pass - #setattr(item, key, self.cleaned_data[key]) + for base_key in self.cleaned_data: + value = self.cleaned_data[base_key] + if not value: + continue + key = base_key[len("qa_"):] + field = item._meta.get_field(key) + if getattr(field, 'related_model', None): + if type(value) == list: + value = [field.related_model.objects.get(pk=v) + for v in value] + else: + value = field.related_model.objects.get(pk=value) + if getattr(field, 'many_to_many', None): + for v in value: + getattr(item, key).add(v) + else: + if base_key not in self.REPLACE_FIELDS: + if getattr(item, key): + value = getattr(item, key) + u"\n" + value + setattr(item, key, value) + item.history_modifier = user + item.save() class DocumentGenerationForm(forms.Form): |