summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-11-07 04:29:38 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-11-07 04:29:38 +0100
commit04d5214a692e5a304ad44fe3536e2738feba3736 (patch)
tree2cd53ac4d28bade77ba185932ca6d0a2b10a7a6f
parent3c4bbb57a67f5d9370471849f6021896f6f907f9 (diff)
downloadChimère-04d5214a692e5a304ad44fe3536e2738feba3736.tar.bz2
Chimère-04d5214a692e5a304ad44fe3536e2738feba3736.zip
Improve CSV export and import - more tolerant add of choice values
-rw-r--r--chimere/models.py18
-rw-r--r--chimere/utils.py8
2 files changed, 21 insertions, 5 deletions
diff --git a/chimere/models.py b/chimere/models.py
index 01d6af0..8d43c75 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -427,6 +427,10 @@ class GeographicItem(models.Model):
def properties(cls):
return [pm for pm in PropertyModel.objects.filter(available=True)]
+ @classmethod
+ def all_properties(cls):
+ return [pm for pm in PropertyModel.objects.all()]
+
def property_setter(cls, propertymodel):
def setter(self, value):
marker = self
@@ -459,7 +463,7 @@ class Marker(GeographicItem):
def __init__(self, *args, **kwargs):
super(Marker, self).__init__(*args, **kwargs)
# add read attributes for properties
- for pm in self.properties():
+ for pm in self.all_properties():
attr_name = pm.getAttrName()
if not hasattr(self, attr_name):
val = ''
@@ -558,6 +562,18 @@ class Marker(GeographicItem):
if len(properties) > 1:
for property in properties[1:]:
property.delete()
+ if pm.type == 'C' and value:
+ try:
+ value = str(int(value))
+ except ValueError:
+ choice = PropertyModelChoice.objects.filter(propertymodel=pm,
+ value=value)
+ if choice.count():
+ value = choice.all()[0].pk
+ else:
+ choice = PropertyModelChoice.objects.create(value=value,
+ propertymodel=pm)
+ value = choice.pk
# new property
if not properties:
new_property = Property.objects.create(marker=self,
diff --git a/chimere/utils.py b/chimere/utils.py
index 75c0ad4..cdd053d 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -475,10 +475,10 @@ class CSVManager(ImportManager):
return (0, 0, msg)
reader = csv.reader(source, delimiter=';', quotechar='"')
prop_cols = []
- for pm in Marker.properties():
+ for pm in Marker.all_properties():
prop_cols.append((pm.name, pm.getAttrName(),
pm.getAttrName()+'_set'))
- cols = self.COLS + prop_cols
+ cols = list(self.COLS) + prop_cols
datas = []
for idx, row in enumerate(reader):
if not idx: # first row
@@ -523,8 +523,8 @@ class CSVManager(ImportManager):
def export(cls, queryset):
dct = {'description':unicode(datetime.date.today()), 'data':[]}
cls_name = queryset.model.__name__.lower()
- cols = cls.COLS
- for pm in queryset.model.properties():
+ cols = list(cls.COLS)
+ for pm in queryset.model.all_properties():
cols.append((pm.name, pm.getAttrName(), pm.getAttrName()+'_set'))
header = [col[0] for col in cols]
dct['data'].append(header)