summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-06-03 00:42:55 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-06-03 00:42:55 +0200
commit8fb73687373a3a876f2ce790047c9972e616dc34 (patch)
treee6547966d9f7c649e1403a546eeabcc9563d46a6 /archaeological_finds
parent810505f6071739d265d967f618dc001f9d8049e4 (diff)
downloadIshtar-8fb73687373a3a876f2ce790047c9972e616dc34.tar.bz2
Ishtar-8fb73687373a3a876f2ce790047c9972e616dc34.zip
Warehouse: work on packaging
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/forms.py6
-rw-r--r--archaeological_finds/models.py22
2 files changed, 19 insertions, 9 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 99907781b..f5387febe 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -432,8 +432,12 @@ class SelectFindBasketForm(forms.Form):
basket = forms.ChoiceField(label=_(u"Basket"), required=True, choices=[])
def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user')
+ self.user = None
+ if 'user' in kwargs:
+ self.user = kwargs.pop('user')
super(SelectFindBasketForm, self).__init__(*args, **kwargs)
+ if not self.user:
+ return
self.fields['basket'].choices = [('', '--')] + [
(b.pk, unicode(b))
for b in models.FindBasket.objects.filter(user=self.user)]
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