diff options
| 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 |
| commit | 04d5214a692e5a304ad44fe3536e2738feba3736 (patch) | |
| tree | 2cd53ac4d28bade77ba185932ca6d0a2b10a7a6f | |
| parent | 3c4bbb57a67f5d9370471849f6021896f6f907f9 (diff) | |
| download | Chimère-04d5214a692e5a304ad44fe3536e2738feba3736.tar.bz2 Chimère-04d5214a692e5a304ad44fe3536e2738feba3736.zip | |
Improve CSV export and import - more tolerant add of choice values
| -rw-r--r-- | chimere/models.py | 18 | ||||
| -rw-r--r-- | chimere/utils.py | 8 |
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) |
