def save_order(data): status = data.get('syncstatus') uuid = data.get('uuid') qs = Orders.objects.filter(uuid=uuid) if not qs: order = Orders(data1=data.get('data1'), data2=data.get('data2'), data3=data.get('data3'), uuid=uuid, valid=False) if status == 1: # Получаем ноывый объект с другого сервиса order.syncstatus = 3 else: sdict = { # Таблица установки нового статуса в зависимости от статусов синхронизируемых объектов ST_NEW: {ST_NEW: ST_COLLISION, ST_OK: ST_OK, ST_COLLISION: ST_COLLISION}, ST_UPD: {ST_UPD: ST_COLLISION, ST_OK: ST_SYNC, ST_COLLISION: ST_COLLISION, ST_DEL: ST_COLLISION}, ST_OK: {ST_NEW: ST_OK, ST_UPD: ST_OK}, ST_DEL: {ST_UPD: ST_COLLISION, ST_OK: ST_DEL_SYNCED, ST_DEL: ST_COLLISION, ST_DEL_SYNCED: ST_DEL_SYNCED, ST_COLLISION: ST_COLLISION}, ST_DEL_SYNCED: {ST_DEL: ST_DEL_SYNCED}, ST_COLLISION: {ST_NEW: ST_COLLISION, ST_UPD: ST_COLLISION, ST_DEL: ST_COLLISION, ST_COLLISION: ST_COLLISION}, ST_ERROR_SYNCED: {ST_ERROR: ST_ERROR_SYNCED}, } order = qs[0] # Если пришли изменения и объект не заблокирован, обновляем данные if status == ST_OK and order.syncstatus == ST_SYNC: order.data1 = data.get('data1') order.data2 = data.get('data2') order.data3 = data.get('data3') order.version = data.get('version') # Обновляем статус объекта if status in sdict and order.syncstatus in sdict[status]: order.syncstatus = sdict[status][order.syncstatus] else: if order.syncstatus == ST_ERROR: order.syncstatus = ST_ERROR_SYNCED elif order.syncstatus == ST_ERROR_SYNCED: pass else: order.syncstatus = ST_ERROR # Если пришли изменения и объект не заблокирован, обновляем данные if order.old_status == ST_OK and order.syncstatus == ST_SYNC: order.data1 = data.get('data1') order.data2 = data.get('data2') order.data3 = data.get('data3') order.version = data.get('version') order.valid = True if order.syncstatus == ST_OK else False print() order.save() if status != order.syncstatus and order.syncstatus != ST_SYNC: send_task(order)