families synchronizing updated to prevend cascade data deletion

This commit is contained in:
Serghei Mihai 2014-06-20 15:50:37 +02:00
parent bc98945412
commit ab1a8c351d
1 changed files with 29 additions and 9 deletions

View File

@ -93,34 +93,54 @@ class FamilleManager(models.Manager):
csv_reader = reader(source, delimiter = ';')
caption = csv_reader.next()
attrs = map(lambda e: self.attribute_mappings[e], caption)
fields = [field.name for field in self.model._meta.fields]
families = ()
families_links = ()
existing_families = dict((fam.id, fam) for fam in self.all())
links = ()
for row in csv_reader:
params = dict(zip(attrs, row))
obj_id = params['id']
obj_id = int(params['id'])
pers1 = params.pop('pers1')
pers2 = params.pop('pers2')
families_links += ((obj_id, pers1, pers2),)
changed = False
# transform all inputs to unicode
for key, value in params.iteritems():
params[key] = unicode(value, 'utf-8')
families += (Famille(**params),)
if obj_id not in existing_families:
families += (Famille(**params),)
else:
obj = existing_families.pop(obj_id)
for field in fields:
if getattr(obj, field) != params[field]:
changed = True
setattr(obj, field, params[field])
if changed:
obj.save()
if existing_families:
self.filter(id__in=existing_families).delete()
if families:
self.bulk_create(families)
for link in families_links:
family, pers1, pers2 = link
for person in (pers1, pers2):
try:
member = Personne.objects.get(pk=person)
famille = self.get(pk=obj_id)
families_links += (LiaisonParentFamille(famille = famille,
personne = member),)
except:
famille = self.get(pk=family)
links += (LiaisonParentFamille(famille = famille,
personne = member),)
except ValueError:
pass
self.all().delete()
self.bulk_create(families)
LiaisonParentFamille.objects.all().delete()
LiaisonParentFamille.objects.bulk_create(families_links)
LiaisonParentFamille.objects.bulk_create(links)
class FactureManager(models.Manager):