diff options
Diffstat (limited to 'archaeological_finds/models.py')
| -rw-r--r-- | archaeological_finds/models.py | 22 | 
1 files changed, 14 insertions, 8 deletions
| diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 417dd3929..c8b392310 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -32,6 +32,7 @@ from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \  from archaeological_operations.models import AdministrativeAct  from archaeological_context_records.models import ContextRecord, Dating +from ishtar_common.models import PRIVATE_FIELDS  from archaeological_warehouse.models import Warehouse, Container @@ -478,19 +479,24 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):          return q.filter(downstream_treatment__isnull=True).count()      def duplicate(self, user): -        # TODO -        raise +        model = self.__class__ +        # base fields +        table_cols = [field.name for field in model._meta.fields +                      if field.name not in PRIVATE_FIELDS or +                      field.name == 'order']          dct = dict([(attr, getattr(self, attr)) for attr in -                    ('order', 'label', 'description', -                     'volume', 'weight', 'find_number', 'dating', -                     'conservatory_state', 'preservation_to_consider', -                     'weight_unit', )]) +                    table_cols])          dct['order'] += 1          dct['history_modifier'] = user          new = self.__class__(**dct)          new.save() -        for base_find in self.base_finds.all(): -            new.base_finds.add(base_find) + +        # m2m fields +        m2m = [field.name for field in model._meta.many_to_many +               if field.name not in PRIVATE_FIELDS] +        for field in m2m: +            for val in getattr(self, field).all(): +                getattr(new, field).add(val)          return new      @classmethod | 
