From e7143f73c3b5019b481ff2d4977cdf2958d1eafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Tue, 5 Nov 2019 14:59:32 +0300 Subject: [PATCH] Add positions --- .../management/commands/add_position.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 apps/establishment/management/commands/add_position.py diff --git a/apps/establishment/management/commands/add_position.py b/apps/establishment/management/commands/add_position.py new file mode 100644 index 00000000..810913dd --- /dev/null +++ b/apps/establishment/management/commands/add_position.py @@ -0,0 +1,36 @@ +from django.core.management.base import BaseCommand +from django.db import connection, connections +from collections import namedtuple +from establishment.models import Position + + +def namedtuplefetchall(cursor): + "Return all rows from a cursor as a namedtuple" + desc = cursor.description + nt_result = namedtuple('Result', [col[0] for col in desc]) + return [nt_result(*row) for row in cursor.fetchall()] + + +class Command(BaseCommand): + help = 'Add position from old db to new db' + + def position_sql(self): + with connections['legacy'].cursor() as cursor: + cursor.execute(''' + select + DISTINCT a.`role` as position_name + from affiliations as a + ''') + return namedtuplefetchall(cursor) + + def handle(self, *args, **kwargs): + + objects = [] + for p in self.position_sql(): + count = Position.objects.filter(name={"en-GB": p.position_name}).count() + if count == 0: + objects.append(Position(name={"en-GB": p.position_name})) + print(p.position_name) + + p = Position.objects.bulk_create(objects) + self.stdout.write(self.style.WARNING(f'Created positions objects.'))