families synchronizing updated to prevend cascade data deletion
This commit is contained in:
parent
bc98945412
commit
ab1a8c351d
|
@ -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):
|
||||
|
||||
|
|
Reference in New Issue